【问题标题】:need db alias(connection_name) in django.db.backends sql query debug log在 django.db.backends sql 查询调试日志中需要 db alias(connection_name)
【发布时间】:2017-11-17 09:18:55
【问题描述】:

当我有DEBUG=True时,我可以使用 django 设置中的记录器配置打印 sql 日志,如下所示。

'django.db.backends': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
         },

[14/Jun/2017 19:50:19] 调试 [django.db.backends:execute] (0.213)
选择“django_session”。“session_key”, "django_session"."session_data", "django_session"."expire_date" FROM "django_session" WHERE ("django_session"."session_key" = E'79a9c6354bf0f30967adbcb0d572707a' 和 "django_session"."expire_date" > E'2017-06-14 19:50:18.019996');
args=('79a9c6354bf0f30967adbcb0d572707a', u'2017-06-14 19:50:18.019996')

但只有我得到的信息是持续时间、sql 和参数
参考django-doc

我的 settings.py 中有多个要连接的数据库,我正在使用 DATABASE_ROUTERS 将我的查询路由到主/从复制。 但我无法找到将 DB 别名 (connection_name) 记录到记录器的方法。
有什么方法可以打印所有带有 connection_name 的查询,而无需在日志文件中使用 django-debug-toolbar

【问题讨论】:

    标签: python django debugging logging


    【解决方案1】:

    您似乎想记录每个数据库的查询数。有一种方法可以在不使用任何自定义调试工具栏的情况下做到这一点。编写自定义中间件并记录查询,如下所示。

    from django.db import connections
    
    for con in connections: 
        print con,len(connections[con].queries), connections[con].queries
    

    【讨论】:

    • 非常感谢@vidya-sagar 我知道在会话期间执行的所有查询都可以使用连接而不是使用连接,这最终给了我几个查询,这与默认数据库有关很明显。
    猜你喜欢
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    相关资源
    最近更新 更多