1

我知道,在设置中,我可以拥有debug = True并记录所有 SQL 查询。

但是,我想在返回响应之前记录一个特定视图所做的所有 SQL 查询。

我怎样才能在 Django 1.3 中做到这一点?

4

1 回答 1

1

这可以通过在特定视图的上下文中更改日志记录设置来完成。

您仍然需要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

于 2012-04-18T20:43:00.853 回答