python - 如何详尽地查看 Django 正在运行的查询?

标签 python django django-1.8

我正在优化代码的很大一部分,因此我试图将数据库命中率降至最低,并尝试在大量但很少的查询中获取所有必要的数据并将其缓存。

但是,我还没有找到一种有效的方法来查看 Django 是否实际上正在对数据库运行查询,或者它是否返回缓存或预取的数据。

理想情况下,我想逐行调试代码的相关部分,并且每个原始 SQL 查询都应该在执行时显示出来。 本质上是某种监听器,一旦运行就记录每个查询。

This显然,检查文档建议的运行查询的方法还不够好,因为它只显示在访问 connection.queries 的同一文件中形成的查询。

访问QuerySet.query也不好,因为它需要一个QuerySet对象。在其他情况下,对数据库运行查询但返回类型不是 QuerySet

我不确定 Django Debug Toolbar也可以,因为我不希望我的行为包含在 View 中,我想执行一个独立的脚本并彻底调试它。

最佳答案

您可以尝试更改 LOGGING 配置,例如在 settings.py 中(如果您 DEBUG,则记录所有查询正确):

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'],
        }
    }
}

关于python - 如何详尽地查看 Django 正在运行的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50720694/

相关文章:

python - numpy 数组的最快保存和加载选项

python - sdist 错误 : option --manifest-only not recognized

python - 超时不工作 django-redis-cache

python - 如何在 Django/Google App Engine 中制作日志颜色?

python - 为什么我的打印功能(在多处理中)什么都不打印?

python - 如何使用字典更新 Django 模型中的字段?

python - Django 测试 : how to specify the apps whose databases I want to use?

Django 1.8 : migrations break with AbstractBaseUser

Django "MigrationSchemaMissing: Unable to create the django_migrations table (no schema has been selected to create in)"

python - Django 1.8 无法加载 css 模板