如何在调试时检查Django生成的原始SQL查询?

时间:2018-06-11 15:08:32

标签: python django debugging optimization profiling

我正在尝试分析项目的大部分内容,仔细分析每行代码生成的查询。仔细分析需要在调试模式下运行服务器,这样我就可以逐个跨过这些行,并花时间研究查询。

到目前为止,我尝试了三种不成功的方法:

检查django.db.connection.queries

通过检查django.db.connection.queries字典,您可以查看针对数据库生成和执行的查询。这个问题:

  • 需要积极检查。您不能只将它作为侦听器并在幕后记录这些查询。您需要在每一行之后实际打印出connection.queries,这是一件麻烦事。
  • 显然它只存储在您使用connection.queries的同一文件中生成的查询。如果您在致电some_method()后立即进行检查,并且该方法是从其他地方导入的,那么您将看不到生成的查询some_method

记录配置

我在我的设置文件中设置了以下日志记录配置,记录了针对数据库运行的所有查询:

LOGGING = {
    'version': 1,
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        }
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
        }
    },
    'loggers': {
        'django.db.backends': {
            'level': 'DEBUG',
            'handlers': ['console']
        }
    }
}

这个问题是PyCharm。在调试时,PyCharm会评估所有涉及的变量,以便您可以查看和检查它们的值。这在大多数情况下都很方便,但它完全扭曲了我的分析,因为评估这些变量是针对数据库运行的查询,这些当然是被记录的。

调试工具栏

这个问题的主要和唯一问题是需要将行为包装在视图中。在视图执行完毕之前,查询日志不会显示,因此无法对其进行调试。

0 个答案:

没有答案