查看 Django 查询集删除的 SQL 查询

Posted

技术标签:

【中文标题】查看 Django 查询集删除的 SQL 查询【英文标题】:View the SQL queries for Django queryset delete 【发布时间】:2011-06-01 05:31:31 【问题描述】:

您如何查看 Django 为 DELETE 生成的 SQL?

在查询集上执行SELECT 操作时,您可以这样做:

>>> qs = Entry.objects.filter(date__gt='2010-06-01')
>>> qs.query.as_sql()
('SELECT ...)

但我不知道如何获取 SQL 以了解当我执行 qs.delete() 时会发生什么。

它看起来有点复杂,因为删除对象时 Django "emulates the behavior of the SQL constraint ON DELETE CASCADE"。

(背景:尝试调试在删除子类模型对象时由外键约束生成的 IntegrityError。)

【问题讨论】:

您可以查看数据库错误日志:) 您解决了 IntegrityError 吗?我在这里遇到同样的问题。奇怪的事实:myobject.delete() 从“管理 shell”工作,但从视图中失败??? 【参考方案1】:

这很好用:

>>> from django.db import connection
>>> connection.queries[:-10]

以为异常发生在查询被添加到connection.queries之前,但它们确实存在。

【讨论】:

你应该接受你自己的答案。这是查看生成的查询的正确方法。【参考方案2】:

您可以尝试运行 django-debug-toolbar 并以这种方式查看查询。

【讨论】:

这种方法不是很通用(比如单元测试期间出现的错误),但是谢谢。

以上是关于查看 Django 查询集删除的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中查看表单和查询集?

Django,有没有办法看到正在执行的SQL查询?

Django - 查询集和一般 SQL 问题

如何使用 SQL 的“IN”等字段上的数组过滤 django 查询集?

如何使用 SQL 的“IN”等字段上的数组过滤 django 查询集?

Django使用分页删除查询集,而不是捕获集合的所有部分