检查 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】:它不起作用,因为query
是Queryset
对象的属性,当您执行.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 生成的查询的主要内容,如果未能解决你的问题,请参考以下文章