LOGGING = {
'disable_existing_loggers': False,
'version': 1,
'handlers': {
'console': {
# logging handler that outputs log messages to terminal
'class': 'logging.StreamHandler',
'level': 'DEBUG', # message level to be written to console
},
},
'loggers': {
'': {
# this sets root level logger to log debug and higher level
# logs to console. All other loggers inherit settings from
# root level logger.
'handlers': ['console'],
'level': 'DEBUG',
'propagate': False, # this tells logger to send logging message
# to its parent (will send if set to True)
},
'django.db': {
# django also has database level logging
'level': 'DEBUG'
},
},
}
from django.db import connections,connection,reset_queries
...
reset_queries() # resets data collection, call whenever it makes sense
...
def query_all():
for c in connections.all():
print(f"Queries per connection: Database: {c.settings_dict['NAME']} {c.queries}")
# and if you just want to count the number of queries
def query_count_all()->int:
return sum(len(c.queries) for c in connections.all() )
Edit settings.py file & add debug_toolbar to Installed apps, this should be added below to 'django.contrib.staticfiles'. Also add debug_toolbar to Middleware.
8条答案
按热度按时间cetgtptt1#
每个QuerySet对象都有一个
query
属性,您可以将其记录或打印到stdout以进行调试。请注意,在pdb中,使用
p qs.query
将无法按预期工作,但print(qs.query)
可以。如果这不起作用,对于旧版Django,请尝试:
我还使用了定制模板标记(如this snippet中所述)将查询作为HTML注解注入到单个请求的范围中。
j13ufse22#
你也可以使用python日志来记录Django生成的所有查询,只需要把它添加到你的设置文件中。
如果应用程序生成html输出,则可以使用另一种方法-django debug toolbar。
sz81bmfz3#
你可以把这段代码粘贴到Django shell上,它会显示所有的SQL查询:
qpgpyjmq4#
只要
DEBUG
处于打开状态:对于单个查询,您可以执行以下操作:
juzqafwq5#
也许你应该看看
django-debug-toolbar
应用程序,它会为你记录所有的查询,显示他们的分析信息等等。ljo96ir56#
一个可靠的解决方案是将数据库服务器记录到一个文件,然后
ubof19bj7#
如果使用数据库路由,则可能有多个数据库连接。类似下面的代码可以让您查看会话中的连接。您可以使用与单个连接相同的方法重置统计信息:第一个月
...
eeq64g8w8#
您可以使用Django debug_toolbar来查看SQL查询。debug_toolbar的使用指南:
安装调试工具栏
Edit settings.py file & add debug_toolbar to Installed apps, this should be added below to 'django.contrib.staticfiles'. Also add debug_toolbar to Middleware.
Settings.py=>
create a new list named INTERNAL_IPS in settings.py file
Settings.py=> create new list at the end of settings.py file & add below list:
这将允许调试仅在内部开发服务器上运行
Edit urls.py file of #Project & add below code:
应用迁移并再次运行服务器
You will see an add-on on your web page at 127.0.0.1 & if you click on SQL Query check box, you can actually see the run time of query as well.