限制Django中数据的生命周期

时间:2014-11-17 15:35:59

标签: mysql django django-models

我在Django中有一个模型,它包含一些月后无关的数据。 有一种方法可以在一段时间后自动删除它吗?

数据库是MySQL,如果重要的话,我无法判断这是否在数据库方面完成(也许是通过MySQL配置它的方式?),或者在我的后端代码。

是否有快速解决方案,或者我是否必须编写执行此操作的代码,并让它每天运行,删除一个月前未添加的内容?

由于

3 个答案:

答案 0 :(得分:5)

我建议创建一个管理命令,查询模型中超过一个月的所有记录并删除这些记录。然后将该管理命令放入每日cronjob中。这应该符合您的需求。

答案 1 :(得分:2)

你可以解决这个问题取决于你的情况, 如果此数据没有任何值,您想删除它 你可以通过

来做到这一点

1-来自数据库&使用crontab

删除mytable WHERE date_field< UNIX_TIMESTAMP(DATE_SUB(NOW(),INTERVAL 30天));

2-使用带有crontab的管理命令

  

导入日期时间

     

samples = Sample.objects.filter(sampledate__gt = datetime.date(2011,1,   1),sampledate__lt = datetime.date(2011,1,31))

3-使用芹菜定期任务

http://celery.readthedocs.org/en/latest/userguide/periodic-tasks.html

答案 2 :(得分:1)

您可以随时让经理过滤:

class RecentManager(models.Manager):
    def get_queryset(self):
        return super(
                RecentManager,
                self
                    ).get_queryset().filter(
            your_timestamp__gt=datetime.datetime.now()-datetime.timedelta(30)
                                            )

class YourModel(models.Model):
    #your fields, including your_timestamp
    objects = RecentManager()
    unrestricted = models.Manager()

    @static
    def delete_old():
        YourModel.unrestricted.filter(
            your_timestamp__lt=datetime.datetime.now()-datetime.timedelta(30)
                ).delete()

将删除连接到管理命令,您可以在cronjob或Celery任务中运行该命令,或者您可以使用其他基础结构进行异步执行。