Obtenir le SQL à partir D'un QuerySet Django [dupliquer]

Cette question a déjà une réponse ici:

Comment puis-je obtenir le 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 suis pas sûr des requêtes qui vont à la base de données. Merci pour votre aide.

238
demandé sur exupero 2010-09-20 06:11:54

5 réponses

Vous imprimez l'attribut query du jeu de requêtes.

>>> queryset = MyModel.objects.all()
>>> print queryset.query
SELECT "myapp_mymodel"."id", ... FROM "myapp_mymodel"
354
répondu jpwatts 2010-09-20 02:17:52

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 enregistrées et vous pouvez les obtenir en accédant à la connexion.requêtes:

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

Le projetdjango debug toolbar l'utilise pour présenter les requêtes sur une page de manière soignée.

49
répondu Mike Axiak 2010-09-20 02:54:26

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

Ce qui suit a renvoyé la requête:

>>> queryset = MyModel.objects.all()
>>> queryset.query.__str__()
31
répondu Hakan B. 2017-05-23 12:02:37

Ce middleware affichera chaque requête SQL sur votre console, avec la surbrillance des couleurs et le temps d'exécution, cela m'a été précieux pour optimiser certaines requêtes difficiles

Http://djangosnippets.org/snippets/290/

9
répondu Guillaume Esquevin 2010-09-20 10:24:40

Comme alternative aux autres réponses, django-devserver affiche SQL sur la console.

8
répondu Tomasz Zielinski 2013-01-03 16:23:23