如何在Django中记录所有SQL查询?
10 个回答
58
在settings.py文件中添加以下加粗的语句
if DEBUG: import logging l = logging.getLogger('django.db.backends') l.setLevel(logging.DEBUG) l.addHandler(logging.StreamHandler()) LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'filters': { 'require_debug_false': { '()': 'django.utils.log.RequireDebugFalse' } }, 'handlers': { 'mail_admins': { 'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler' },'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', }, }, 'loggers': { 'django.request': { 'handlers': ['mail_admins'], 'level': 'ERROR', 'propagate': True, },'django.db.backends.sqlite3': { 'level': 'DEBUG', 'handlers': ['console'], }, } }
255
把下面的代码片段和你在 settings.py
文件里的 LOGGING
字段合并在一起:
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'],
}
}
}
这个是根据 @acardenas89 的回答稍微修改过来的
23
你可以看看这个链接:https://github.com/django-debug-toolbar/django-debug-toolbar
这个工具可以让你看到某个页面生成的所有数据库查询,还能显示这些查询发生的具体位置等信息。
补充一下:如果你想把所有的SQL查询记录到一个文件里,你需要创建一些中间件。中间件会在每次请求时运行。网上有很多关于这个的Django代码片段:
这些代码片段主要是用来在终端打印信息,但你可以很容易地修改它们,使用Python的日志库来记录信息。