如何扩展django connection.queries输出的时间尺度?

时间:2016-11-17 09:36:00

标签: python django

目前我有这个输出:

from django.db import connection
print connection.queries

输出:     [{' time':' 0.000',...

我想输出如下:     [{' time':' 0.000000',...

有可能吗?如果有,怎么样?如果不是为什么不呢? 我的大多数SQL查询都在0.000时间范围内执行。基本上我想实现这个功能,这样当我在settings.py中设置我的DEBUG True并进行必要的更改时,我希望能够在我的日志中看到小时间分数的SQL执行时间。

2 个答案:

答案 0 :(得分:4)

这由位于django.db.backends.utils中的CursorDebugWrapper类填充。这也是查询时间缩短的地方。

'time': "%.3f" % duration,

如果你想要更多的数字,你需要创建自己的CursorDebugWrapper并monkeypatch BaseDatabaseWrapper它在哪里启动或创建你自己的数据库后端。

def make_debug_cursor(self, cursor):
    """
    Creates a cursor that logs all queries in self.queries_log.
    """
    return utils.CursorDebugWrapper(cursor, self)

答案 1 :(得分:0)

如果您使用的是this之类的设置,则可以使用格式化程序,例如

OxyPlot.Core

您可以增加.8f以获得更高的精度。上面会产生类似以下的内容

LOGGING = {
    'version': 1,
    'loggers': {
        'django.db.backends': {
            'level': 'DEBUG',
            'handlers': ['console']
        }
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'my_time'
        }
    },
    'formatters': {
        'my_time': {
            'format': 'Time: {duration:.8f} s\nSQL: {sql}\nArgs: {params}',
            'style': '{'
        }
    }
}