参见文档常见问题解答:"How can I see the raw SQL queries Django is running?"
django.db.connection.queries
包含SQL查询的列表:
from django.db import connection
print(connection.queries)
QuerySet还有一个query
attribute,其中包含要执行的查询:
print(MyModel.objects.filter(name="my name").query)
请注意,查询的输出不是有效的SQL,因为:
Django从不实际插入参数:它将查询和参数分别发送到数据库适配器,后者执行适当的操作
来自Django bug report #17741.
因此,不应将查询输出直接发送到数据库.
如果需要将查询重置为,例如,查看给定时间段内运行的查询数,可以使用django.db
中的reset_queries
:
from django.db import reset_queries
reset_queries()
print(connection.queries)
>>> []