【问题标题】:Logging Django SQL queries with DEBUG set to False使用 DEBUG 设置为 False 记录 Django SQL 查询
【发布时间】:2026-01-28 21:30:05
【问题描述】:

我知道,通过查看connection.queries,可以在 DEBUG 开启时获取为当前请求/响应运行的所有 SQL 查询。 django-debug-toolbar 对开发也有很大帮助。

问题是我的生产服务器负载很高,我想记录为每个视图执行的查询,以便我可以首先优化创建更多查询的页面。

是否可以在不修改我的数据库驱动程序的情况下做到这一点?

【问题讨论】:

    标签: sql django optimization django-orm


    【解决方案1】:

    在 Django 1.3 中,我看到 django/db/backends/__init__.py 中的类 BaseDatabaseWrapper 有一个属性 use_debug_cursor。此类是代表默认数据库连接 (docs) 的 django.db.connection 对象的包装器。似乎将此属性设置为 true 会导致 Django 使用来自django/db/backends/util.pyCursorDebugWrapper,它记录它执行的所有查询,而不是CursorWrapper,它不会。

    use_debug_cursor 在 Django 1.2 中不存在,这是我目前在这台机器上安装的,所以我现在无法测试它。如果我有几分钟的时间,我会尝试让一个虚拟的 1.3 项目开始对此进行测试...我很可能在这里搞砸了!

    use_debug_cursor 在 Django 1.8 中重命名为 force_debug_cursor

    【讨论】: