检查 Django 生成的查询

Posted

技术标签:

【中文标题】检查 Django 生成的查询【英文标题】:Check query Django generates 【发布时间】:2014-09-08 04:48:51 【问题描述】:

如何检查 django 1.4.11 为该查询生成了哪个查询:

obj = Model.objects.get(code='code')

我试过了:

print Model.objects.get(code='code').query

但是模型对象有这样的方法。 如何获取原始 sql?

【问题讨论】:

【参考方案1】:

它不起作用,因为queryQueryset 对象的属性,当您执行.get() 查询集时,它会被评估(并成为模型的实例)

如果你尝试:

>>> type(Model.objects.get(code='code'))
<class 'app.models.Model'>
>>> print Model.objects.get(code='code').query
AttributeError: 'Model' object has no attribute 'query'

但改为:

>>> type(Model.objects.all())
<class 'django.db.models.query.QuerySet'>
>>> print Model.objects.all().query
SELECT "model.Model" from ...

现在,要获取所有查询的 SQL,您有多种选择:

如果DEBUG=True你可以使用这个:

from django.db import connection
print connection.queries

使用 django-debug-toolbar

使用内置的 django 日志记录 https://docs.djangoproject.com/en/dev/topics/logging/#django-db-backends 您可以找到有关如何设置 here in SO 的示例。

【讨论】:

以上是关于检查 Django 生成的查询的主要内容,如果未能解决你的问题,请参考以下文章

django F表达式生成的SQL查询

使用 Q 自动生成 django 查询

多对多的 Django Inline 生成重复查询

在生成 django 管理 URL 时覆盖查询集过滤器

使用原始 SQL 查询生成表,并希望在 Django 中将这些表用作 ORM

Django:生成博客的活动条目列表。这有效率吗?