This middleware will add a log of the SQL queries executed at the bottom of every page. It also includes a query count and total and per-query execution times.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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
|
More like this
- Template tag - list punctuation for a list of items by shapiromatron 11 months, 2 weeks ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 11 months, 3 weeks ago
- Serializer factory with Django Rest Framework by julio 1 year, 6 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 7 months ago
- Help text hyperlinks by sa2812 1 year, 7 months ago
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
#
Please login first before commenting.