python - 如何详尽地查看 Django 正在运行的查询?
问题描述
我正在优化我的大部分代码,因此我试图将数据库命中率降至最低,并尝试在大但很少的查询中获取所有必要的数据并将其缓存。
但是,我还没有找到一种有效的方法来查看 Django 是否实际上正在对数据库运行查询,或者它是否正在返回缓存或预取的数据。
理想情况下,我想逐行调试代码的相关部分,并且每个原始 SQL 查询都应在执行时显示。本质上是某种侦听器,它会在运行后立即记录每个运行的查询。
这种检查文档建议的运行查询的方法不够好,因为它显然只显示在您访问的同一文件中形成的查询connection.queries
。
访问QuerySet.query
也不好,因为它需要一个QuerySet
对象。在其他情况下,对数据库运行查询但返回类型不是QuerySet
.
我也不确定Django 调试工具栏是否可以工作,因为我不希望我的行为包含在视图中,我想执行一个独立的脚本并彻底调试它。
解决方案
您可以尝试更改LOGGING
配置,例如在您的settings.py
(如果您DEBUG
是,则记录所有查询True
):
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'],
}
}
}
推荐阅读
- security - 令牌和跨站点请求伪造
- windows - Go get under Windows: git bash 的 SSL 证书问题
- azure - Azure Pipelines 中的 Glob 模式以排除地图文件和资产文件夹
- python - 在 Lambda Python 中使用两个变量
- javascript - 如何只为数组中的第一项做某事
- java - @Consume 如何填充变量和对象?
- azure-devops - 代理服务在 VM 上运行,但在 DevOps 门户中显示为脱机
- javascript - JavaScript 映射对象
- r - 当我在 R 中多次运行代码时更新 csv
- typescript - 在打字稿中加载类属性