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?Dies ist eine sehr späte Antwort, aber für die anderen, die durch die Suche hierher gekommen sind.
Ich möchte eine Protokollierungsmethode einführen, die sehr einfach ist; fügen Sie django.db.backends
logger in settins.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'level': 'DEBUG',
},
},
}
Ich verwende auch eine Umgebungsvariable, um das Niveau einzustellen. Wenn ich also die SQL-Abfragen sehen möchte, setze ich einfach die Umgebungsvariable, und das Debug-Protokoll zeigt die tatsächlichen Abfragen an.
Obwohl Sie es mit dem mitgelieferten Code tun können, finde ich, dass die Debug-Symbolleisten-App ein großartiges Werkzeug ist, um Abfragen anzuzeigen. Sie können es von github herunterladen aquí .
Damit haben Sie die Möglichkeit, alle auf einer bestimmten Seite durchgeführten Abfragen zusammen mit der für die Abfrage benötigten Zeit anzuzeigen. Außerdem wird die Anzahl der Abfragen auf einer Seite zusammen mit der Gesamtzeit für einen schnellen Überblick zusammengefasst. Dies ist ein großartiges Tool, wenn Sie sich ansehen wollen, was der Django ORM hinter den Kulissen tut. Es hat auch eine Menge anderer netter Funktionen, die Sie verwenden können, wenn Sie möchten.
Eine weitere Option, siehe Logging-Optionen in settings.py, beschrieben in diesem Beitrag
http://dabapps.com/blog/logging-sql-queries-django-13/
debug_toolbar verlangsamt jeden Seitenladevorgang auf Ihrem Entwicklungsserver, Logging nicht, also ist es schneller. Die Ausgaben können auf die Konsole oder in eine Datei ausgegeben werden, so dass die Benutzeroberfläche nicht so schön ist. Aber bei Ansichten mit vielen SQLs kann es sehr lange dauern, die SQLs mit debug_toolbar zu debuggen und zu optimieren, da jeder Seitenaufbau so langsam ist.
Zu diesem Zweck habe ich eine Erweiterung entwickelt, mit der Sie ganz einfach einen Dekorator auf Ihre Ansichtsfunktion setzen können und sehen können, wie viele Abfragen ausgeführt werden.
Zum Installieren:
$ pip install django-print-sql
Zur Verwendung als Kontextmanager:
from django_print_sql import print_sql
# set `count_only` to `True` will print the number of executed SQL statements only
with print_sql(count_only=False):
# write the code you want to analyze in here,
# e.g. some complex foreign key lookup,
# or analyzing a DRF serializer's performance
for user in User.objects.all()[:10]:
user.groups.first()
Zur Verwendung als Dekorateur:
from django_print_sql import print_sql_decorator
@print_sql_decorator(count_only=False) # this works on class-based views as well
def get(request):
# your view code here