web-dev-qa-db-fra.com

Obtenir le code SQL d'un Django QuerySet

Comment obtenir le code SQL que Django utilisera sur la base de données à partir d'un objet QuerySet? J'essaie de déboguer un comportement étrange, mais je ne sais pas quelles requêtes vont à la base de données. Merci de votre aide.

272
exupero

Vous imprimez l'attribut query du queryset.

>>> queryset = MyModel.objects.all()
>>> print(queryset.query)
SELECT "myapp_mymodel"."id", ... FROM "myapp_mymodel"
407
jpwatts

Facile:

print my_queryset.query

Par exemple:

from Django.contrib.auth.models import User
print User.objects.filter(last_name__icontains = 'ax').query

Il convient également de mentionner que si vous avez DEBUG = True, toutes vos requêtes sont consignées et vous pouvez les obtenir en accédant à connection.queries:

from Django.db import connections
connections['default'].queries

Le projet barre d'outils de débogage de Django l'utilise pour présenter les requêtes sur une page de manière soignée.

50
Mike Axiak

La réponse acceptée n'a pas fonctionné pour moi avec Django 1.4.4. Au lieu de la requête brute, une référence à l'objet Query a été renvoyée: <Django.db.models.sql.query.Query object at 0x10a4acd90>.

Les éléments suivants ont renvoyé la requête:

>>> queryset = MyModel.objects.all()
>>> queryset.query.__str__()
39
Hakan B.

Comme alternative aux autres réponses, Django-devserver envoie du code SQL à la console.

9
Tomasz Zieliński

Ce middleware produira toutes les requêtes SQL sur votre console, avec la mise en surbrillance des couleurs et le temps d'exécution. Il m'a été d'une aide précieuse pour optimiser certaines requêtes délicates.

http://djangosnippets.org/snippets/290/

9
Guillaume Esquevin