Gibt es eine Möglichkeit, die SQL, die Django ausgeführt wird, während der Durchführung einer Abfrage zu zeigen?
Antworten
Zu viele Anzeigen?Siehe FAQ der Dokumente: " Wie kann ich die rohen SQL-Abfragen sehen, die Django ausführt? "
django.db.connection.queries
enthält eine Liste der SQL-Abfragen:
from django.db import connection
print(connection.queries)
Querysets haben auch eine query
Attribut die die auszuführende Abfrage enthält:
print(MyModel.objects.filter(name="my name").query)
Beachten Sie, dass die Ausgabe der Abfrage kein gültiges SQL ist, weil:
"Django interpoliert die Parameter nie: Es sendet die Abfrage und die Parameter separat an den Datenbankadapter, der die entsprechenden Operationen durchführt."
Aus dem Django-Fehlerbericht #17741 .
Aus diesem Grund sollten Sie Abfrageausgaben nicht direkt an eine Datenbank senden.
Wenn Sie die Abfragen zurücksetzen müssen, um z. B. zu sehen, wie viele Abfragen in einem bestimmten Zeitraum laufen, können Sie reset_queries
de django.db
:
from django.db import reset_queries
reset_queries()
print(connection.queries)
>>> []
Django-Erweiterungen ein Kommando haben Muschel_plus mit einem Parameter print-sql
./manage.py shell_plus --print-sql
In der django-shell werden alle ausgeführten Abfragen ausgegeben
Ex.:
User.objects.get(pk=1)
SELECT "auth_user"."id",
"auth_user"."password",
"auth_user"."last_login",
"auth_user"."is_superuser",
"auth_user"."username",
"auth_user"."first_name",
"auth_user"."last_name",
"auth_user"."email",
"auth_user"."is_staff",
"auth_user"."is_active",
"auth_user"."date_joined"
FROM "auth_user"
WHERE "auth_user"."id" = 1
Execution time: 0.002466s [Database: default]
<User: username>
Werfen Sie einen Blick auf debug_toolbar ist es sehr nützlich für die Fehlersuche.
Dokumentation und Quelle finden Sie unter http://django-debug-toolbar.readthedocs.io/ .
Keine andere Antwort deckt diese Methode ab, also:
Die bei weitem nützlichste, einfachste und zuverlässigste Methode ist es, Ihre Datenbank zu befragen. Zum Beispiel unter Linux für Postgres könnten Sie tun:
sudo su postgres
tail -f /var/log/postgresql/postgresql-8.4-main.log
Jede Datenbank hat ein etwas anderes Verfahren. In den Datenbankprotokollen sehen Sie nicht nur das rohe SQL, sondern auch jeden Verbindungsaufbau oder Transaktions-Overhead, den Django dem System aufbürdet.
- See previous answers
- Weitere Antworten anzeigen