如何通过日期时间在MySQL和Django中删除数据库条目?

0 投票
3 回答
1024 浏览
提问于 2025-04-16 22:56

我在用Django 1.3和MySQL,数据库里存了帖子。这些帖子会存放一段时间,比如7天。现在我想知道,怎么才能在这7天过后删除这些帖子?我不是在问怎么删除,而是想知道怎么判断什么时候该删除。

我不知道这样做是否合适,但我考虑的一个方法是,当用户查找某个帖子时,如果这个帖子的存放时间到了,就把它删除。另外,当我搜索或者浏览帖子时,从数据库里拉取帖子列表,我会检查这个列表,删除那些超过时间限制的帖子。让我担心的是,如果我拉取了10个帖子,其中9个都超过了时间限制,那我就得再拉取一个新列表。如果新列表里还有超过时间限制的帖子,我又得继续拉取……这样一来,可能会导致很多次查询,效率就会很低。所以有没有更好的办法呢?

或者有没有更好的实现方式?

总之,我想知道怎么能让用户永远看不到过期的帖子。

我不确定我表达得是否清楚,我对怎么高效地做到这一点感到很困惑。

3 个回答

0

难道不能在帖子上标记一个过期日期吗?

class Post(models.Model):
    # ...
    date_expire = models.DateField()

我会把保存的方法改进一下,给当前日期加上7天,然后把这个日期保存到那个字段里。这样,当用户查看帖子的时候,

def some_view(request):
    # ....
    posts = Post.objects.filter(date_expire__gte=date_obj)

如果你需要删除这些帖子,一种简单的方法就是通过类似的查询方式收集过期的帖子,然后调用删除功能。或者,你也可以设置一个脚本,通过定时任务来处理这类事情。

0

你应该设置一个每天运行的定时任务,使用简单的SQL删除语句来根据时间戳删除数据,或者可以写一个自定义的Django管理命令。

参考资料:

自定义Django命令

在Django中使用定时任务

0

你可能想要设置一个定时任务,每晚批量删除旧帖子。如何在Django环境中设置定时任务,可以参考这篇文章

最受欢迎的回答:

我用过的一种解决方案是这样做的:

1) 创建一个自定义管理命令,比如:

python manage.py my_cool_command

2) 使用cron在需要的时间运行我的命令。

撰写回答