设置:
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不能将上面的代码片断转换为一个删除查询.有没有一种方法可以在不求助于原始SQL的情况下对此进行优化?

推荐答案

除非编写您自己的自定义SQL或管理器或其他东西;不过,他们显然正在处理这件事.

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

Django相关问答推荐

如何在uwsgi中创建单个日志(log)文件?

如何删除Docker上的django应用程序?

Django 根据子级过滤父级

按下按钮刷新在html文件中显示的变量

如何使用具有某些权限的 Django 组的转储数据和加载数据?

如何在 createsuperuser 中实例化表

防止 Django 从表单集中保存特定表单

查询 django 模型以找到当月最好的公司销售

包含资源时,DRF 返回我的软删除记录

Django RESTful API - django-piston vs. django-tastypie

ModelForm 的 Django TextField max_length 验证

Django - 站点匹配查询不存在

Django - 如何从模型中 Select 特定列?

将 XML 从 URL 解析为 python 对象

使用 XMLHttpRequest 提示下载文件

Django 模板:通过扩展模板覆盖包含的子模板块

从基于类的通用视图中获取 request.session

如何在 Django 1.9 中删除 DB (sqlite3) 以从头开始?

django python 日期时间设置为午夜

在 Django REST 框架序列化程序中动态排除或包含字段