Skip to content

Instantly share code, notes, and snippets.

@temoto
Created August 1, 2014 05:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save temoto/3a3c154bf5730d3c2122 to your computer and use it in GitHub Desktop.
Save temoto/3a3c154bf5730d3c2122 to your computer and use it in GitHub Desktop.
Django SQL DB trace: see where your queries are coming from. Now you may find https://pypi.python.org/pypi/django-devserver better.
from django.db.models.sql import Query
from functools import wraps
import inspect
TRACE_THIS_QUERY = u'SELECT "blog_group"."id", "blog_group"."name", "blog_group"."arg" FROM "blog_group" INNER JOIN "blog_group_members" ON ("blog_group"."id" = "blog_group_members"."group_id") WHERE "blog_group_members"."user_id" = %s '
def trace_get_compiler(fun):
@wraps(fun)
def wrapped(*args, **kwargs):
compiler = fun(*args, **kwargs)
try:
stack = inspect.stack()[4:-13]
except Exception:
return compiler
sql, params = compiler.as_sql()
#print u"--- SQL query = {0}".format(sql)
if sql == TRACE_THIS_QUERY:
print u"--- SQL trace:"
for (_frame, filename, lineno, fun_name, _context, _index) in stack:
print u" ", filename, lineno, fun_name
del _frame
del stack
return compiler
return wrapped
Query.get_compiler = trace_get_compiler(Query.get_compiler)
--- SQL trace:
* /usr/lib/pymodules/python2.6/django/db/models/fields/related.py 302 __get__
* /home/temoto/project/py-rambler-blog/blog/django_orm/menu.py 71
* /home/temoto/project/py-rambler-blog/blog/django_orm/menu.py 71 build_menu_tree
* /home/temoto/project/py-rambler-blog/blog/main/views.py 530 block_main_menu
* /home/temoto/project/py-rambler-blog/blog/wsgi.py 125 wsgi_app
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment