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.
Vous imprimez l'attribut query
du queryset.
>>> queryset = MyModel.objects.all()
>>> print(queryset.query)
SELECT "myapp_mymodel"."id", ... FROM "myapp_mymodel"
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.
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__()
Comme alternative aux autres réponses, Django-devserver envoie du code SQL à la console.
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.