【问题标题】:View the SQL queries for Django queryset delete查看 Django 查询集删除的 SQL 查询
【发布时间】: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”工作,但从视图中失败???

标签: django django-orm


【解决方案1】:

这很好用:

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

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

【讨论】:

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

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

【讨论】:

  • 这种方法不是很通用(比如单元测试期间出现的错误),但是谢谢。
猜你喜欢
  • 1970-01-01
  • 2010-11-01
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 2017-08-12
  • 1970-01-01
相关资源
最近更新 更多