使用“”打印 Django QuerySet SQL
Posted
技术标签:
【中文标题】使用“”打印 Django QuerySet SQL【英文标题】:Printing Django QuerySet SQL with "" 【发布时间】:2011-12-28 02:13:53 【问题描述】:您可以按如下方式打印查询集的 SQL:
print str(queryset.query)
但是,由于某种原因,这会删除引号,因此您会得到:
SELECT `tableA`.`fieldA` FROM `fieldA` WHERE `tableA`.`fieldB` = Foo
代替:
SELECT `tableA`.`fieldA` FROM `fieldA` WHERE `tableA`.`fieldB` = "Foo"
注意缺少的""
如何纠正?
【问题讨论】:
数据库后端将查询模板和参数分别传递给您的数据库——Django 本身 从不 需要使用填充的占位符构建正确引用的查询。这就是为什么你只能得到这个不完整的解决方案来进行调试。 【参考方案1】:如果底层数据库是PostgreSQL,你可以这样做:
from django.db import connection
sql, params = queryset.query.sql_with_params()
cursor = connection.cursor()
cursor.mogrify(sql, params)
sql_with_params
返回未替换任何值的普通查询以及将插入查询中的参数。
仍然不建议将.mogrify()
用于除调试以外的其他目的,因为该方法将来可能会消失。
如果你想执行查询,你可以/应该只使用.raw()
。
YourModel.objects.raw(sql, params)
【讨论】:
【参考方案2】:如果这是出于调试目的,您应该查看 django-debug-toolbar,它将显示为您正在查看的任何视图运行的所有查询
【讨论】:
【参考方案3】:不是你想要的,但如果你有DEBUG = True
,你可以使用
from django.db import connection
connection.queries
更新:
看Queryset
__str__
方法:
__str__(self)
| Returns the query as a string of SQL with the parameter values
| substituted in.
|
| Parameter values won't necessarily be quoted correctly, since that is
| done by the database interface at execution time.
【讨论】:
这仅在发送查询后才有效,而我需要在之前打印它以防提取出现问题以上是关于使用“”打印 Django QuerySet SQL的主要内容,如果未能解决你的问题,请参考以下文章