webentwicklung-frage-antwort-db.com.de

Django für eine Abfrage auf Vorhandenes prüfen

In Django wie Sie prüfen, ob ein Eintrag für eine Abfrage vorhanden ist

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

So wurde es in PHP gemacht

if(mysql_num_rows($resultn)) {
    // True condition
    }
else {
    // False condition
    }
72
Hulk

Verwenden Sie count() :

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

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

Der Vorteil gegenüber z.B. len() bedeutet, dass das QuerySet noch nicht ausgewertet wurde:

count() führt eine SELECT COUNT(*) hinter den Kulissen aus, daher sollten Sie immer count() verwenden, anstatt den gesamten Datensatz in Python Objekte und Aufrufen von len() auf dem Ergebnis.

Vor diesem Hintergrund kann Wenn QuerySets ausgewertet werden eine Lektüre wert sein.


Wenn Sie get() verwenden, z. scorm.objects.get(pk=someid) und das Objekt existiert nicht, wird eine ObjectDoesNotExist Ausnahme ausgelöst:

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

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

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

Gibt True zurück, wenn das QuerySet Ergebnisse enthält, und False, wenn dies nicht der Fall ist. Dadurch wird versucht, die Abfrage auf einfachste und schnellste Weise auszuführen, es wird jedoch nahezu dieselbe Abfrage wie bei einer normalen QuerySet-Abfrage ausgeführt.

66
Felix Kling

Ab Django 1.2 können Sie exists() verwenden:

https://docs.djangoproject.com/en/dev/ref/models/querysets/#exists

if some_queryset.filter(pk=entity_id).exists():
    print("Entry contained in queryset")
157
sdornan