是否可以仅在Django中为一个视图记录查询?

时间:2012-04-18 20:23:27

标签: django

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

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

如何在Django 1.3中执行此操作?

1 个答案:

答案 0 :(得分:1)

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

您仍然需要启用DEBUG

  

出于性能原因,只有在settings.DEBUG设置为True时才启用SQL日志记录,无论安装的日志级别或处理程序如何。

...但您可以修改配置,以便仅记录特定视图的查询。

以下是如何做到的:

1:在settings.py中将django SQL logger(django.db.backends)级别设置为INFO或更高级别,并验证它是否已停止记录SQL查询。

2.A。在您的视图中第一行有SQL日志记录,将该记录器级别设置为DEBUG。最后一行,将其设置回原始值。这是最简单的方法,但是在视图代码之前/之后由中间件执行的查询不会被记录。

2.b中。编写自定义中间件以在视图处理之前和之后执行相同的操作。如果您将其放在第一位,则其他中间件所做的所有查询也将被记录。

请注意,此方法不是线程安全的,但由于您只想在开发环境中进行此设置,因此这无关紧要。


Django文档“Logging”章节: https://docs.djangoproject.com/en/1.4/topics/logging/

Python日志库参考: http://docs.python.org/library/logging.html