我想知道在psycopg2连接上执行的sql查询的数量。
有没有办法获得这个号码?
如果HTTP请求产生的语句过多,我想发出警告。
我正在运行Django应用程序。如果DEBUG为True,则我有connection.queries。但是我想从生产服务器上获得这个价值
更新
我想要产品环境中的数字(统计数据)。这个问题与调试特定的http请求无关。
答案 0 :(得分:3)
看看django-silk。它是一个分析工具,可记录诸如响应时间和查询数量之类的指标。
如果要推出自己的解决方案,并且正在使用Django 2.0,则可以使用connection wrapper创建中间件。该文档甚至展示了QueryLogger
类:
import time
from django.db import connection
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.time()
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.time() - start
current_query['duration'] = duration
self.queries.append(current_query)
class QueryLogginMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
ql = QueryLogger()
with connection.execute_wrapper(ql):
response = self.get_response(request)
# do something with ql.queries here
return response
答案 1 :(得分:0)
如果数据库和其他所有内容的环境都相同,那么在Production和Development上进行的查询数量是相同的。
我建议您如上所述使用Django Debug Toolbar,复制查看您的View正在执行的查询数量,然后根据该代码重新考虑您的代码,如果您想查看这些查询的性能,我建议您使用{来自Postgresql的{1}}命令。
通常,我复制查询并将其粘贴并在我的postgreaql数据库外壳中添加解释。看到这个:http://recordit.co/rGZ2SAo7PX