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

标签 python mysql django django-models

我有一个 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/

相关文章:

python - 如何水平对齐按钮?

django - 使用 Devops CI/CD 将 Django Web App 部署到 Azure 应用服务

python - 查找字符串的所有大写、小写和混合大小写组合

python - 为什么 `with open()` 更适合在 Python 中打开文件?

MySQL抛出不正确的字符串值错误

PHP 将变量移动到另一个文档

python - 在 Django 中,如何立即将组的创建者添加到该组?

python - DIScord 命令认为 bool 为 True

Python:理解(None for g in g if (yield from g) and False)

mysql - SQL:处理 INSERT INTO 的列不匹配