Django以较长的执行时间记录查询

时间:2014-09-10 13:53:54

标签: python django

有没有办法记录我的django应用程序执行时间长的数据库查询?

1 个答案:

答案 0 :(得分:2)

这是一个记录执行时间超过1秒的查询的中间件:

from django.db import connection
import logging

LONG_QUERY_TIME_SEC = 1

class LongQueryLogMiddleware:
    def process_response ( self, request, response ): 
        for q in connection.queries:
            if float(q['time']) >= LONG_QUERY_TIME_SEC:
                logging.warning("Found long query (%s sec): %s", q['time'], q['sql'])
        return response

请注意,因为connection.queries是进程范围的,所以可以将查询记录两次。这可以通过在函数结束后运行以下内容来解决:

from django.db import reset_queries
reset_queries()