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 line of codes that generated the request. — at Initial Version

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

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(namestartswith="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 (0)

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