设置:
Django 1.1.2,MySQL 5.1

问题:

Blob.objects.filter(foo = foo) \
            .filter(status = Blob.PLEASE_DELETE) \
            .delete()

此代码段导致ORM首先生成SELECT * from xxx_blob where ...查询,然后执行DELETE from xxx_blob where id in (BLAH);,其中BLAH是ID的荒谬列表。由于我要删除大量的Blob,这使我和DB都非常不高兴。

是否有一个原因?我不明白为什么ORM无法将上面的代码片段转换为单个DELETE查询。有没有一种方法可以优化此方法而不求助于原始SQL?

最佳答案

并非没有编写自己的自定义SQL或管理器之类的东西;他们显然正在努力。

http://code.djangoproject.com/ticket/9519

关于python - 如何提高Django QuerySet批量delete()的效率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4867852/

10-16 00:49