Django get query execution time(Django获取查询执行时间)
本文介绍了Django获取查询执行时间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有没有办法在不使用django-debug-toolbar的情况下测量Django查询时间?它不是用来调试/记录的,我需要它像about # results (# seconds)那样显示在网页上。
编辑:我需要在生产模式下使用此功能,因此DEBUG=True不是选项
推荐答案
虽然django.db.connection.queries会给出查询次数,但仅当DEBUG=True时才起作用。为了将其用于一般用途,我们可以使用Database instrumentation [Django docs]并编写一个包装器来计时我们的查询。下面是直接来自上述文档的示例,我想说它似乎符合您的需求:
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'])
这篇关于Django获取查询执行时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:Django获取查询执行时间
基础教程推荐
猜你喜欢
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
