查看 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 查询的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SQL 的“IN”等字段上的数组过滤 django 查询集?