Sometimes I'd like to know how many database queries were used to generate a particular view, but can't be bothered with the full weight of the (otherwise excellent) django-debug-toolbar.
The toolbar does a lot of logging and slows down rendering. Also, by default I want
'INTERCEPT_REDIRECTS': False, but then I don't see the queries used in the form processing (only what was used to render the page redirected to).
So instead I wrote a small piece of middleware that just outputs the query count as part of the runserver console output:
# queries: 4 [03/Mar/2012 10:20:37] "GET /admin/ HTTP/1.0" 200 23831 # queries: 114 [03/Mar/2012 10:20:51] "GET /oops/ HTTP/1.0" 200 57321 # queries: 14 [03/Mar/2012 10:21:07] "GET /admin/members/ HTTP/1.0" 200 37601
import sys from django.conf import settings from django.db import connection from django.utils import termcolors class QueryPrintingMiddleware(object): start = None def process_request(self, request): if settings.DEBUG: self.start = len(connection.queries) def process_response(self, request, response): if settings.DEBUG and 'runserver' in sys.argv and self.start is not None: red = termcolors.make_style(opts=('bold',), fg='red') yellow = termcolors.make_style(opts=('bold',), fg='yellow') count = len(connection.queries) - self.start output = '# queries: %s' % count output = output.ljust(15) # add some colour if count > 100: output = red(output) elif count > 10: output = yellow(output) # runserver just prints its output to sys.stderr, so follow suite sys.stderr.write(output) return response