from django.db import connection
from django.template import Template, Context
class SQLLogMiddleware:
def process_response ( self, request, response ):
time = 0.0
for q in connection.queries:
time += float(q['time'])
t = Template('''
<p><em>Total query count:</em> {{ count }}<br/>
<em>Total execution time:</em> {{ time }}</p>
<ul class="sqllog">
{% for sql in sqllog %}
<li>{{ sql.time }}: {{ sql.sql }}</li>
{% endfor %}
</ul>
''')
response.content = "%s%s" % ( response.content, t.render(Context({'sqllog':connection.queries,'count':len(connection.queries),'time':time})))
return response
Comments
Is there some trick or dependency to this? Returns 0 for me. 0 queries, 0 seconds.
#
If you see no queries:
You must set DEBUG=True in settings.py
#
I improved this snippet in Snippet 344.
It counts duplicated SQL queries.
#
Since Unicode branch I've changed code at bottom to:
#
more pythonic time calculation:
also this snippet doesn't work with JSON response content out of the box
#
I made a variation on this that logs to console, rather than appending SQL queries to the response. My snippet uses 'print' so it is only really useful when running
manage.py runserver.It is Snippet 1672.
#