1
cljnnn 2018-01-01 12:18:06 +08:00 via Android
直接 SQL 命令操作 database,可以不?
|
2
leopardwei 2018-01-01 13:01:01 +08:00 1
crontab、celery 或者自己写个守护进程每天轮询
|
3
Hstar 2018-01-01 13:29:48 +08:00 3
软删除比较简单, 插入时设定过期时间, 查询时过滤过期时间.
|
4
dangyuluo 2018-01-01 14:21:02 +08:00 via iPhone
楼上根据时间软删除是正解。
|
5
siteshen 2018-01-01 14:32:29 +08:00 1
class Post(models.Model):
expires_at = DateField() def delete_post(post): post.update(expires_at=now() + timedelta(days=30)) def list_posts(): Post.query.filter(expires_at < now() + timedelta(days=30)).all() |
6
incompatible 2018-01-01 15:01:41 +08:00 2
你的通过计划任务定时删除的实现方式就是最好的方式。
楼上们说的通过时间过滤的方式可行,但是不是最好的方式,在性能敏感的情况下甚至可以说是个很烂的方式。 明明是一个可以在业务低谷期离线运行的任务,却要加在每一个在线查询里面凭白消耗计算资源。 |
7
RadishWind 2018-01-01 15:06:45 +08:00 1
1.mysql 有基于时间的 trigger 可以实现这个功能( model.raw("xxxx"))
2.后台起一个 demon 每天轮询 清除 3.在 model/middleware/view 中 调用一个检查过期的函数(如果对性能有要求 可以基于概率来做) |
8
virusdefender 2018-01-01 22:32:13 +08:00
查询的时候,delete_time__lte=timezone.now - 30days
|
9
yilai 2018-01-02 00:33:53 +08:00 via Android
基于时间做软删除,真要在库里删掉的话在写个脚本轮询被
|