/ / Wie implementiert Django die Existenzprüfung - Python, MySQL, Django, Django-Modelle, Django-Orm

Wie implementiert Django Existenzprüfung - Python, Mysql, Django, Django-Modelle, Django-Orm

Für die folgende Abfrage:

res = People.objects.all().exists()

Was genau macht Django mit einem MySQL-Backend? Ist es das Folgende:

cursor.execute("SELECT * FROM people")
results = cursor.fetchall()
if results:
res = True
else:
res = False

Oder wird etwas Optimierteres verwendet, z. B .:

cursor.execute("SELECT 1 FROM people")
if cursor.fetchone():
res = True
else:
res = False

Antworten:

3 für die Antwort № 1

Django versucht immer zu optimieren exists() Abfrage. Im Falle von mysql es verwendet LIMIT 1:

SELECT 1 FROM people LIMIT 1

Wie Daniel in den Kommentaren angemerkt hat, können Sie die zugrunde liegenden Abfragen von Django untersuchen, indem Sie sie anzeigen connection.queries:

from django.db import connection

res = People.objects.all().exists()
print connection.queries

Weitere Informationen finden Sie unter Wie kann ich die rohen SQL-Abfragen sehen, die Django ausführt?

Zu Ihrer Information, has_results() Methode in django.db.models.sql.Query Klasse ist verantwortlich für die Konstruktion der exists() Abfrage.