Django Model.objects.all()。delete()没有完成

时间:2013-12-12 22:48:26

标签: python mysql django django-models

我有一个django应用程序,删除数据库中的所有条目,然后进入另一个集合。我遇到一个问题,Model.objects.all().delete()在数据库中留下了对象(每次都是相同的条目)。

我已使用此代码修复了它:

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

显然,这不是一个很好的解决方案。发生了什么,我该如何解决?

1 个答案:

答案 0 :(得分:5)

我发现删除对大型查询集不起作用。它似乎为每个对象/行生成单独的删除。在一个我不得不删除数百万行的情况下,它会在完成之前超时。由于它总是在同一点上超时,所以相同的行将保留。答案是编写原始sql。像

这样的东西
Event.objects.raw('DELETE FROM myapp_event')

我不确定这是发生在你身上的事情。但这是一种可能的选择。提供的SQL对Postgresql和MySQL有效。其他可能不同。请参阅您的文档。此外,大多数数据库都具有更快的TRUNCATE命令。它看起来像是:

Event.objects.raw('TRUNCATE myapp_event')   

你必须查找你的表名。 一般他们将<django_app_name>_<model_name>小写。请注意,django应用程序名称不是整个应用程序名称。这是子应用程序。