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.
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"
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.
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__()
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
Comme alternative aux autres réponses, django-devserver affiche SQL sur la console.