在數據庫中,我有一個名爲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