Opened 7 years ago

Last modified 7 years ago

#28035 new New feature

Help Django Programmer to link a Query in their database logs with the Python lines of code that generated the request. — at Version 2

Reported by: Rémy Hubscher Owned by: nobody
Component: Database layer (models, ORM) Version: 1.10
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Tim Graham)

The QuerySet creation and the QuerySet execution doesn't happens at the same time in Django.

However when you want to link a query in your database logs with your Python code, you want to see where the QuerySet have been created as well as were it was executed.

Each time you call a new method on your queryset it will create a new queryset with the new filter or order_by or annotate calls.

The plan would be to keep track of all these calls that generated a new QuerySet and to add it as a database comment when executing the request.

Then you would be able to link easily where your request have been generated from in your python code.

SELECT * FROM users WHERE id = 1; -- users/views.py L.21 `user = Users.objects.get(pk=request.user.id)`

It is especially useful when you create conditionals QuerySet:

SELECT * FROM users WHERE name LIKE 'enac%' ORDER BY username; -- users/views.py L.18 `qs = Users.objects.all() \n users/views.py L.25 `qs = qs.filter(name__startswith="enac")` \n users/views.py L.30 `qs = qs.order_by('username')` \n templates/user_search.html L.55 `{% for user in users %}`

If we want to do that as a library outside of Django, it means we would have to monkey patch the QuerySet object.
Do we want to make it a Django Feature?

We could add the comment only when DEBUG = True or DATABASE_QUERY_LOGS = True

Change History (2)

comment:1 by Rémy Hubscher, 7 years ago

Summary: Help Django Programmer to link a Query in their database logs with the Python line of codes that generated the request.Help Django Programmer to link a Query in their database logs with the Python lines of code that generated the request.

comment:2 by Tim Graham, 7 years ago

Component: UncategorizedDatabase layer (models, ORM)
Description: modified (diff)
Type: UncategorizedNew feature

I'm not sure if this is feasible to implement. How would it work?

Note: See TracTickets for help on using tickets.
Back to Top