使用 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.py
的CursorDebugWrapper
,它记录它执行的所有查询,而不是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 在设置中给出错误