代码之家  ›  专栏  ›  技术社区  ›  dabadaba

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

  •  4
  • dabadaba  · 技术社区  · 7 年前

    我试图分析我的项目的很大一部分,仔细分析每行代码生成的查询。仔细分析需要在调试模式下运行服务器,这样我就可以一行一行地检查这些查询,并花时间研究查询。

    django.db.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']
            }
        }
    }
    

    调试工具栏

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

    0 回复  |  直到 7 年前