我有一个 Django 应用程序,它删除数据库中的所有条目,然后进入另一组。我遇到一个问题,Model.objects.all().delete()
将对象留在数据库中(每次都是相同的条目)。
我已经用这段代码修复了它:
db_events = Event.objects.all()
while db_events.count():
db_events.delete()
显然这不是一个很好的修复。这是怎么回事,我该如何解决?
最佳答案
我发现 delete 对于大型查询集效果不是很好。它似乎为每个对象/行生成单独的删除。在我不得不删除数百万行的情况下,它会在完成之前超时。由于它总是会在同一时间超时,因此会保留相同的行。答案是写原始的sql。有点像
Event.objects.raw('DELETE FROM myapp_event')
不过,我不确定这是否是发生在您身上的事情。但这是一种可能的选择。提供的 SQL 对 Postgresql 和 MySQL 有效。其他人可能会有所不同。请查阅您的文档。此外,大多数数据库都有更快的 TRUNCATE 命令。它看起来像:
Event.objects.raw('TRUNCATE myapp_event')
您必须查找表名。 一般他们会是<django_app_name>_<model_name>
小写的。请注意,django 应用程序名称不是整个应用程序名称。这是子应用程序。
关于python - Django Model.objects.all().delete() 没有完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20555876/