一尘不染

记录所有sql查询

django

如何记录django应用程序执行的所有SQL查询?

我想记录所有内容,包括来自管理站点的SQL。我看到了这个问题和一个常见问题解答,但是我仍然不知道应该把它放在哪里

from django.db import connection
connection.queries

将所有内容记录到一个文件?

所以我的问题是-我应该怎么做才能拥有一个记录所有SQL语句的文件(例如all-sql.log)?


阅读 439

收藏
2020-03-26

共2个答案

一尘不染

也许看看https://github.com/django-debug-toolbar/django-debug-toolbar

它可以让您查看给定页面生成的所有查询。以及它们发生的位置的堆栈跟踪等。

编辑:将所有SQL查询记录到文件等,然后您将要创建一些中间件。中间件在每个请求上运行。有几种Django片段供您使用:

那些与打印到终端有关,但要使其适应使用python的日志记录库并不难。

2020-03-26
一尘不染

在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'],
        },
    }
}
2020-03-26