我正在优化代码的很大一部分,因此我试图将数据库命中率降至最低,并尝试在大量但很少的查询中获取所有必要的数据并将其缓存。
但是,我还没有找到一种有效的方法来查看 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/