如何查看 Django 正在运行的原始 SQL 查询?

新手上路,请多包涵

有没有办法在执行查询时显示 Django 正在运行的 SQL?

原文由 spence91 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 815
2 个回答

请参阅文档常见问题解答:“ 我如何查看 Django 正在运行的原始 SQL 查询?

django.db.connection.queries 包含 SQL 查询列表:

 from django.db import connection
print(connection.queries)

查询集还有一个 query 包含要执行的查询的属性

 print(MyModel.objects.filter(name="my name").query)

请注意,查询的输出不是有效的 SQL,因为:

“Django 从不实际插入参数:它将查询和参数分别发送到数据库适配器,数据库适配器执行适当的操作。”

来自 Django 错误报告 #17741

因此,您不应将查询输出直接发送到数据库。

如果您需要重置查询,例如查看在给定时间段内运行了多少查询,您可以使用 reset_queries 来自 django.db

 from django.db import reset_queries

reset_queries()
print(connection.queries)
>>> []

原文由 geowa4 发布,翻译遵循 CC BY-SA 4.0 许可协议

from django.db import reset_queries, connection
class ShowSQL(object):
    def __enter__(self):
        reset_queries()
        return self

    def __exit__(self, *args):
        for sql in connection.queries:
            print('Time: %s\nSQL: %s' % (sql['time'], sql['sql']))

然后你可以使用:

 with ShowSQL() as t:
    some queries <select>|<annotate>|<update> or other

它打印

  • 时间:%s
  • SQL: %s

原文由 Igor Kremin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题