django - 删除大型 Django 查询集导致 Apache 内部服务器错误

标签 django django-queryset bulk

我尝试使用以下方法删除大约 200,000 个对象(它们都有多个相关对象,总共大约 2,000,000 个对象):

DataRecord.objects.filter(order=self.order).delete()

但我收到内部服务器错误(大约 20 分钟后),并且没有任何对象被删除。我将 Apache 超时设置为 3600(1 小时),以便为该操作提供足够的时间。

是否有更有效的方法来批量删除大量对象?

最佳答案

似乎最好的解决方案是使用原始查询(请参阅 https://docs.djangoproject.com/en/dev/topics/db/sql/#executing-custom-sql-directly ),但是 pre_deletepost_delete 信号不会被触发。

随机 ORM 想法:DataRecord.order 列是否已索引?

编辑: 识别列是否容易:查看列是否设置了 db_index 属性,即:

class DataRecord(models.Model):
    order = models.IntegerField(_("order"), **db_index=True**)

索引可以快速查找数据,而无需读取整个表。这就像书中的索引 - 当您想在其中查找某个单词时,索引将帮助您找到它,而无需阅读整本书。

关于django - 删除大型 Django 查询集导致 Apache 内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12116452/

相关文章:

django - Django 模型中的派生变量

django - 在 Django 中将计算值从 View 保存到模型

python - 返回 ForeignKey 字段模型的 QuerySet 的 Django .values_list() 替代方案?

java - Sybase JConnect : ENABLE_BULK_LOAD usage

python - 如何批量获取/放置 Yahoo 联系人

python - Django - 如何在多个表单上使用完全相同的 clean() 方法

django - 带有 Django channel 的 Websocket 不工作,连接失败

Django、ModelForms、User 和 UserProfile - 不散列密码

python - 按两次删除的ForeignKey对象过滤

TFS 2010 - 这次只批量 checkout .html 文件......如何?