日期过后,从数据库中删除行

时间:2015-11-08 03:56:51

标签: django

在数据库中,我有一个名为date的字段。有没有办法在日期过后删除一行,以便它不再出现?我已经尝试将它与视图中的今天日期进行比较,但这并不是每天都会发生的,人们仍会在第一页加载时看到它。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

由于许多原因,从数据库中删除某些内容并不安全。从权限转到on_delete逻辑。如果您不确定是否完全需要删除某些内容,只需将此行标记为active=false即可。

我不建议使用cron,因为它难以维护:您必须手动在不同环境中设置不同的任务,将这些文件复制到VCS上的某个位置,使用bash代替{ {1}}。

此外,在讨论事件时,我不建议在您的数据库中存储这样的内容,因为它不受VCS控制且难以维护。

如果您的应用非常简单,schedule是一个选项。

但如果你正在寻找一些额外的信息,如:

  1. 删除了哪些行?
  2. 有没有例外?
  3. 您可以在启用python的情况下转移到更复杂的Celery。额外的依赖关系(如BeatRedis)是主要的缺点。

    文档:

    相关:

答案 1 :(得分:0)

我认为最好的方法是使用Cron作业或在视图中使用附加条件,以便在上述日期之后仅显示行。

答案 2 :(得分:0)

我建议你使用mysql事件,因为它会不断运行,不像只触发数据库操作的触发器。您希望这发生在应用程序中发生的任何事情之外,仅基于时间,因此mysql事件将适用于此场景。请参阅此处的完整教程:http://www.sitepoint.com/working-with-mysql-events/

答案 3 :(得分:0)

我有一个更简单的方法,我想你可以称之为“硬编码”。我创建了一个名为deleteevent的函数,它具有以下代码

 def deleteevent():
     yesterday = date.today() - timedelta(1)
     if Events.objects.filter(event_date = yesterday).count():
         Events.objects.filter(event_date = yesterday).delete()

然后,在我所有的其他功能中,我在开头调用了这个,所以在加载页面之前会删除该事件