Django 通过psycopg2连接执行的查询数

Django 通过psycopg2连接执行的查询数,django,postgresql,psycopg2,Django,Postgresql,Psycopg2,我想知道在psycopg2连接上执行的sql查询的数量 有办法得到这个号码吗 如果http请求生成的语句太多,我想发出警告 我正在运行django应用程序。如果DEBUG是真的,那么我有。但我希望从生产服务器获取此值 更新 我想从prod环境中获取数字(统计数据)。这个问题不是关于调试一个特定的http请求。如果您的数据库和其他所有东西上都有相同的环境,那么对生产和开发进行的查询量是相同的 我建议您使用如上所述,复制查看视图执行的查询数量,并在此基础上重新思考代码。如果您想查看这些查询的性能,我

我想知道在psycopg2连接上执行的sql查询的数量

有办法得到这个号码吗

如果http请求生成的语句太多,我想发出警告

我正在运行django应用程序。如果DEBUG是真的,那么我有。但我希望从生产服务器获取此值

更新


我想从prod环境中获取数字(统计数据)。这个问题不是关于调试一个特定的http请求。

如果您的数据库和其他所有东西上都有相同的环境,那么对生产和开发进行的查询量是相同的

我建议您使用如上所述,复制查看视图执行的查询数量,并在此基础上重新思考代码。如果您想查看这些查询的性能,我建议您使用postgresql中的
explain
命令

我通常会复制查询并将其与explain一起粘贴到postgreaql数据库外壳中。见此:

看一看。它是一个分析工具,记录响应时间和查询数等指标

如果您想推出自己的解决方案,并且使用的是Django 2.0,那么可以创建一个具有。文档甚至显示了一个
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

您是否尝试了Django调试工具栏?它显示执行查询的数量。我想获取生产机器上每个http请求的数量。django调试工具栏注册一个信号处理程序来完成它的工作。我希望避免这种开销,因为我担心django调试工具栏会降低性能。你是对的,如果我对dev中的相同数据集执行完全相同的请求,那么查询量将相等。但我需要prod环境的统计数据。我无法在开发环境中重现一个月的prod流量。我更新了这个问题,让它更清楚。在这种情况下,你可以使用一些工具,根据你的交通和环境更容易安装和使用。它可能很昂贵,但在我看来完全值得。