用于将django sql查询打印到终端的上下文管理器
django-debug-queries的Python项目详细描述
这个包为django应用程序提供了一个简单的上下文管理器 将由代码块引起的sql查询输出到标准 输出。
(要抢先回答一个常见问题:django调试工具栏允许您查看 由对应用程序的http请求引起的查询,但我通常希望 跟踪管理命令或某些命令中使用的查询 除了在浏览器中发出请求之外的其他上下文;show_queries 此包中的上下文管理器在其他情况下有帮助。)
警告
请注意,调试将设置为true 整个街区(并恢复到之前 之后的值),因此不应在 例如,生产。
如果您安装了sqlparse,那么sql将很好地打印到 使它们更容易阅读,因此我建议您也这样做:
pip install sqlparse
示例
from django_debug_queries import show_queries ... with show_queries(): people = list(Person.objects.filter(date_of_birth__gt="2000-01-01") \ .values('id', 'legal_name')) sessions = list(ParliamentarySession.objects.all())
这可能会将以下内容输出到标准输出:
--===-- Number of queries: 2 Query 0 (taking 0.003): SELECT "core_person"."id", "core_person"."legal_name" FROM "core_person" WHERE "core_person"."date_of_birth" > '2000-01-01' ORDER BY "core_person"."sort_name" ASC Query 1 (taking 0.005): SELECT "core_parliamentarysession"."id", "core_parliamentarysession"."created", "core_parliamentarysession"."updated", "core_parliamentarysession"."start_date", "core_parliamentarysession"."end_date", "core_parliamentarysession"."house_id", "core_parliamentarysession"."position_title_id", "core_parliamentarysession"."mapit_generation", "core_parliamentarysession"."name", "core_parliamentarysession"."slug" FROM "core_parliamentarysession" ORDER BY "core_parliamentarysession"."start_date" ASC End of query output.
其他选项
长查询字符串可能需要很长时间才能使用sqlparse进行漂亮的打印, 所以在默认情况下,长度为2048个字符的sql是不格式化的; 您可以使用可选的^{tt2}调整该限制$ 参数,例如:
with show_queries(sqlparse_character_limit=8192): ...
如果在django应用程序中使用多个数据库,则可以 告诉它使用带有可选^{tt3}的特定数据库$ 参数,例如
with show_queries(db_alias='my_other_db'): ...