428 Stimmen

Abrufen von SQL aus einem Django QuerySet

Wie erhalte ich die SQL, die Django auf die Datenbank aus einem QuerySet-Objekt verwenden wird? Ich versuche, einige seltsame Verhalten zu debuggen, aber ich bin nicht sicher, welche Abfragen an die Datenbank gehen.

662voto

jpwatts Punkte 7737

Sie drucken den Queryset's query Attribut.

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

73voto

Mike Axiak Punkte 11357

Einfach:

print my_queryset.query

Zum Beispiel:

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

Es sollte auch erwähnt werden, dass bei DEBUG = True alle Ihre Abfragen protokolliert werden, und Sie können sie durch Zugriff auf connection.queries abrufen:

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

Le site django debug toolbar Projekt nutzt dies, um die Abfragen auf einer Seite übersichtlich darzustellen.

70voto

Hakan B. Punkte 2161

Die akzeptierte Antwort funktionierte bei mir nicht, wenn ich Django 1.4.4 verwendete. Anstelle der Rohabfrage wurde ein Verweis auf das Query-Objekt zurückgegeben: <django.db.models.sql.query.Query object at 0x10a4acd90> .

Die Abfrage ergab Folgendes:

>>> queryset = MyModel.objects.all()
>>> queryset.query.__str__()

12voto

Guillaume Esquevin Punkte 2942

Diese Middleware gibt jede SQL-Abfrage auf der Konsole aus, mit farblicher Hervorhebung und Ausführungszeit. Sie war für mich von unschätzbarem Wert bei der Optimierung einiger kniffliger Anfragen

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

12voto

Tomasz Zieliński Punkte 15606

Als Alternative zu den anderen Antworten, django-devserver gibt SQL auf der Konsole aus.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X