通过psycopg2连接执行的查询数

gue*_*tli 5 django postgresql psycopg2

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

有没有办法得到这个数字?

我想警告一个http请求是否产生太多语句.

我正在运行一个django应用程序.如果DEBUG为True,那么我有connection.queries.但我想从生产服务器获取此值

更新

我想从prod环境中获取数字(统计数据).这个问题与调试特定的http请求无关.

Dan*_*per 4

看看django-silk。它是一种分析工具,可记录响应时间和查询数量等指标。

如果您想推出自己的解决方案并且正在使用 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
Run Code Online (Sandbox Code Playgroud)