使用 DEBUG 设置为 False 记录 Django SQL 查询

Posted

技术标签:

【中文标题】使用 DEBUG 设置为 False 记录 Django SQL 查询【英文标题】:Logging Django SQL queries with DEBUG set to False 【发布时间】:2011-11-03 03:15:14 【问题描述】:

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

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

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于使用 DEBUG 设置为 False 记录 Django SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

为啥当 Debug 设置为 False 时,Django 会为静态媒体生成 HTTP 500 错误?

发生数据库错误!由 db_debug 修复设置为 false?

thinkphp将APP_DEBUG常量设置为false后报错的问题

Django-Compress with debug=false 在设置中给出错误

如果 DEBUG 为 False,您必须设置 settings.ALLOWED_HOSTS。 Django-r-f

Django中的ORM转换为SQL语句日志