Попробуйте панель инструментов отладки django . Он покажет вам весь SQL, выполненный над запросом. Когда что-то выполняет слишком много запросов, это становится очень медленным. Для этого я хотел попробовать этот профилировщик . Тем не менее, я развернул это промежуточное ПО на нескольких проектах:
<code>try:
from cStringIO import StringIO
except ImportError:
import StringIO
from django.conf import settings
from django.db import connection
class DatabaseProfilerMiddleware(object):
def can(self, request):
return settings.DEBUG and 'dbprof' in request.GET
def process_response(self, request, response):
if self.can(request):
out = StringIO()
out.write('time sql\n')
total_time = 0
for query in reversed(sorted(connection.queries, key=lambda x: x['time'])):
total_time += float(query['time'])*1000
out.write('%s %s\n' % (query['time'], query['sql']))
response.content = '<pre style="white-space:pre-wrap">%d queries executed in %.3f seconds\n%s
'\
% (len (connection.queries), total_time / 1000, out.getvalue ())
обратный ответ
Просто перейдите по соответствующему URL-адресу для запроса, который вас интересует, и добавьте параметр dbprof
GET
, вы увидите результат профилирования вместо обычного ответа.