2013-12-12 56 views
3

我有一個django應用程序,它刪除一個數據庫中的所有條目,然後輸入另一個集合。我遇到了一個問題,其中Model.objects.all().delete()在數據庫中留下了對象(每次都使用相同的條目)。Django Model.objects.all()。delete()沒有完成

我已經使用此代碼固定它:

db_events = Event.objects.all() 
while db_events.count(): 
    db_events.delete() 

顯然,這是不是一個偉大的修復。發生了什麼事情,我該如何解決它?

回答

4

我發現刪除不適用於大型查詢集。它似乎爲每個對象/行生成單獨的刪除。在我必須刪除數百萬行的一個例子中,它會在完成之前超時。由於它始終會在同一點超時,相同的行將保留。答案是編寫原始的sql。類似於

Event.objects.raw('DELETE FROM myapp_event') 

我不確定這是發生在你身上的事情。但這是一個可能的選擇。提供的SQL對Postgresql和MySQL有效。其他可能不同。請參閱您的文檔。另外,大多數數據庫都有一個更快的TRUNCATE命令。它看起來像:

Event.objects.raw('TRUNCATE myapp_event') 

你必須查找你的表名。 一般他們將<django_app_name>_<model_name> lowercased。請注意,django應用程序名稱不是整個應用程序名稱。這是子應用程序。