Django获取查询执行时间。

3

除了使用django-debug-toolbar外,有没有其他方法来测量Django查询时间?这不是用于调试/日志记录,我需要在网页上显示结果类似于关于 # 结果 (# 秒)

编辑:我需要在生产模式下使用此功能,因此DEBUG=True不是一个选项。


我并没有把Victor的评论看作是不友好的(而且还有一个笑脸...)。这也是一个合理的观点(即为什么墙上挂钟的时间不能令人满意)。 - thebjorn
3个回答

11

虽然 django.db.connection.queries 可以提供查询时间,但只有在 DEBUG=True 时才有效。为了通用性,我们可以使用数据库工具 [Django 文档]并编写一个包装器来计时查询。下面是文档中的示例,我认为它适合您的需要:

import time

class QueryLogger:

    def __init__(self):
        self.queries = []

    def __call__(self, execute, sql, params, many, context):
        current_query = {'sql': sql, 'params': params, 'many': many}
        start = time.monotonic()
        try:
            result = execute(sql, params, many, context)
        except Exception as e:
            current_query['status'] = 'error'
            current_query['exception'] = e
            raise
        else:
            current_query['status'] = 'ok'
            return result
        finally:
            duration = time.monotonic() - start
            current_query['duration'] = duration
            self.queries.append(current_query)

要使用此功能,您需要按以下方式进行查询:
from django.db import connection

query_logger = QueryLogger()

with connection.execute_wrapper(query_logger):
    # Make your queries here

for query in query_logger.queries:
    print(query['sql'], query['duration'])

3
您可以这样做:
如果在settings.py中设置了DEBUG=True,您可以使用以下命令查看数据库查询(和时间)信息:
>>> from django.db import connection
>>> connection.queries  

P.s: 有一个叫做django-debug-toolbar的软件包可以帮助您更好地查看查询和时间等信息...。我建议使用它而不是connection.queries


我需要这个“功能”在生产服务器上运行,所以对我来说DEBUG=True不是一个选项。无论如何,感谢你的努力! - kaixiang1212

3

你可以在 django.db.connection.queries 中找到相关信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接