我知道,在设置中,我可以拥有debug = True
并记录所有 SQL 查询。
但是,我想在返回响应之前记录一个特定视图所做的所有 SQL 查询。
我怎样才能在 Django 1.3 中做到这一点?
我知道,在设置中,我可以拥有debug = True
并记录所有 SQL 查询。
但是,我想在返回响应之前记录一个特定视图所做的所有 SQL 查询。
我怎样才能在 Django 1.3 中做到这一点?
这可以通过在特定视图的上下文中更改日志记录设置来完成。
您仍然需要DEBUG
启用:
出于性能原因,仅当 settings.DEBUG 设置为 True 时才启用 SQL 日志记录,而与安装的日志记录级别或处理程序无关。
...但您可以修改配置,以便仅记录特定视图的查询。
这是如何完成的:
1:settings.py
将 django SQL logger ( django.db.backends
) 级别设置为INFO
或更高,并验证它是否停止记录 SQL 查询。
2.a. 在您的视图中具有 SQL 日志记录的第一行,将该记录器级别设置为DEBUG
. 最后一行,将其设置回原始值。这是最简单的方法,但不会记录中间件在查看代码之前/之后执行的查询。
2.b。编写自定义中间件在视图处理之前和之后做同样的事情。如果你把它放在第一位,其他中间件的所有查询也会被记录下来。
请注意,此方法不是线程安全的,但由于您只希望在开发环境中进行此设置,因此这无关紧要。
Django 文档“日志”一章: https ://docs.djangoproject.com/en/1.4/topics/logging/
Python 日志库参考: http ://docs.python.org/library/logging.html