Django-Prüfung für eine Abfrage


Antworten:


85

Verwendung count():

sc=scorm.objects.filter(Header__id=qp.id)

if sc.count() > 0:
   ...

Der Vorteil gegenüber zB len()ist, dass das QuerySet noch nicht ausgewertet wird:

count()führt einen Blick SELECT COUNT(*)hinter die Kulissen aus, daher sollten Sie immer den count() gesamten Datensatz verwenden, anstatt ihn in Python-Objekte zu laden und len() das Ergebnis aufzurufen .

Vor diesem Hintergrund kann es sich lohnen , wenn QuerySets ausgewertet werden.


Wenn Sie get()z. B. verwenden scorm.objects.get(pk=someid)und das Objekt nicht vorhanden ist, wird eine ObjectDoesNotExistAusnahme ausgelöst:

from django.core.exceptions import ObjectDoesNotExist
try:
    sc = scorm.objects.get(pk=someid)
except ObjectDoesNotExist:
    print ...

Update: Es ist auch möglich zu verwenden exists():

if scorm.objects.filter(Header__id=qp.id).exists():
    ....

Gibt zurück, Trueob das QuerySet Ergebnisse enthält, und Falsewenn nicht. Dadurch wird versucht, die Abfrage auf einfachste und schnellste Weise durchzuführen, es wird jedoch fast dieselbe Abfrage wie bei einer normalen QuerySet-Abfrage ausgeführt.


51
if scorm.objects.filter(Header__id=qp.id).exists()
Alexander Lebedev

@ Alex Lebedev: Ja, diese Methode wird in Django 1.2 verfügbar sein. Danke dir.
Felix Kling

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.