Django Model.objects.all().delete() 未完成
Posted
技术标签:
【中文标题】Django Model.objects.all().delete() 未完成【英文标题】:Django Model.objects.all().delete() not completing 【发布时间】:2013-12-31 14:16:15 【问题描述】:我有一个 django 应用程序,它删除数据库中的所有条目,然后进入另一个集合。我遇到Model.objects.all().delete()
将对象留在数据库中的问题(每次都相同的条目)。
我已使用此代码修复它:
db_events = Event.objects.all()
while db_events.count():
db_events.delete()
显然这不是一个很好的解决方案。发生了什么,我该如何解决?
【问题讨论】:
【参考方案1】:我发现删除对于大型查询集效果不佳。它似乎为每个对象/行生成单独的删除。在一个我不得不删除数百万行的情况下,它会在完成之前超时。由于它总是在同一点超时,因此将保留相同的行。答案是编写原始 sql。类似的东西
Event.objects.raw('DELETE FROM myapp_event')
我不确定这是发生在你身上的事情。但这是一种可能的选择。提供的 SQL 对 Postgresql 和 mysql 有效。其他人可能会有所不同。请查阅您的文档。此外,大多数数据库都有一个更快的 TRUNCATE 命令。它看起来像:
Event.objects.raw('TRUNCATE myapp_event')
您必须查找您的表名。 通常它们将是 <django_app_name>_<model_name>
小写。请注意 django 应用程序名称不是整个应用程序名称。这是子应用程序。
【讨论】:
以上是关于Django Model.objects.all().delete() 未完成的主要内容,如果未能解决你的问题,请参考以下文章
django model 条件过滤 queryset.filter(**condtions) 用法