在数据库中,我有一个名为date的字段。有没有办法在日期通过时删除一行,以便它不再显示?我试图将它与今天的日期进行比较,但这不会每天都发生,并且人们仍然会在首页加载时看到它。有任何想法吗?当日期通过时从数据库中删除行
回答
我相信最好的方法是使用Cron作业或在视图中使用附加的条件来仅显示上述日期之后的行。
我会建议你使用一个mysql事件,因为这会持续运行,不像只触发数据库操作的触发器。你希望这发生在应用程序中发生的任何事情之外,只是基于时间,所以mysql事件将适用于这种情况。看到完整的教程在这里:http://www.sitepoint.com/working-with-mysql-events/
从数据库中删除的东西是不安全的,原因很多。从权限开始on_delete
逻辑。如果您不确定是否完全需要删除某些内容,请将该行标记为active=false
。
我不会推荐使用cron
,因为它难以维持:你必须在不同环境下手动设置不同的任务,与bash
代替python
某处复制这些文件在您的VCS工作。
另外,在讨论事件时,我不建议在数据库中存储类似这样的内容,因为它不受VCS控制且难以维护。
如果您的应用程序非常简单schedule是一个选项。
但是,如果你正在寻找像一些额外的信息:
- 被删除了哪些行?
- 有没有例外?
你可以移动到更复杂的Celery
与Beat
打开。额外的依赖性(如Redis
,RabbitMQ
)是主要的缺点。
文档:
相关:
我看着调度程序,但似乎只用于调度任务,如每小时或每10分钟。它有一个功能可以在某个日期完成工作吗? @sobolevn –
短暂的看着源说:对不起,没有https://github.com/dbader/schedule/blob/master/schedule/__init__.py – sobolevn
我想我找到了我自己的答案,我发布了它,让我知道你在想什么 –
我有一个更简单的方法,我想你可以把它称为“硬编码”。我做了一个叫deleteevent功能,其中有下面的代码
def deleteevent():
yesterday = date.today() - timedelta(1)
if Events.objects.filter(event_date = yesterday).count():
Events.objects.filter(event_date = yesterday).delete()
然后,在所有其他功能我有,我叫这个开头,所以页面加载
好吧,我认为这不是一个好的方法:对于*每个*函数调用你有两个额外的数据库命中,而且你在主线程中执行它。 – sobolevn
- 1. 数据库过期后从数据库中删除会话?
- 2. 从MySQL数据库中提取日期删除时间
- 3. 从数据库中删除数据,其中日期... SQL
- 4. 通过C#DataGridView删除数据库行?
- 5. 无法通过删除()删除SQLite数据库中的行 - Android
- 6. 当它到达过期日期时删除一行PHP Mysql
- 7. 从数据框中删除一行时指数(日期时间)是星期天
- 8. FreeRADIUS - 当会话已过期时从数据库中删除用户
- 9. 当通过SSIS存储到Oracle数据库时,日期反转
- 10. 通过PHP从数据库中删除一行
- 11. 自动删除在SQLite数据库中的过期日期后的行c#
- 12. 过期日期过后删除tableview行
- 13. 通过日期/时间限制删除旧的缓存和tableview的数据通过日期/时间限制
- 14. 在JSP当前时间戳日期日期从数据库
- 15. 每n秒自动从数据库中删除过时的行
- 16. Mojox :: Session过期但从未从数据库中删除
- 17. 从pandas数据框中的日期时间删除时间戳
- 18. 从时间删除日期
- 19. 从日期删除时间
- 20. 通过比较数据库中的当前日期来计算
- 21. 当从数据库删除行时刷新页面
- 22. 如何通过ID从数据表和数据库中删除行
- 23. 如何从数据库中减去当前日期与日期
- 24. 如何从数据库中删除过期的数据(取决于期间列)
- 25. 通过使用日期和值从传感器中删除冗余数据
- 26. 从数据库中删除过期的OAuth令牌
- 27. 过期后从数据库中删除错误
- 28. 通过JavaFX GUI从数据库删除数据
- 29. 的ID从数据库中删除行
- 30. 从MySQL数据库中删除一行
事件之前就被删除你能说明? @AlanRezende –
解决方案user2352738使其更好。我不知道你正在处理的代码,但是由于它的显示逻辑(而不是业务逻辑),你可以在你的视图中放一个简单的* if *并且比较日期以显示或不显示行。 但坚持user2352738的答案,你从长远来看会更好。 – AlanRezende