Django sprawdza, czy istnieje jakieś zapytanie


Odpowiedzi:


87

Zastosowanie count():

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

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

Zaletą nad np. len()Jest to, że zestaw QuerySet nie jest jeszcze oceniany:

count()wykonuje SELECT COUNT(*)za kulisami, więc powinieneś zawsze używać count() zamiast ładować cały rekord do obiektów Pythona i wywoływać len() wynik.

Mając to na uwadze, warto przeczytać , kiedy QuerySets są oceniane .


Jeśli użyjesz get()np scorm.objects.get(pk=someid), a obiekt nie istnieje, ObjectDoesNotExistzostanie zgłoszony wyjątek:

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

Aktualizacja: można również użyć exists():

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

Zwraca, Truejeśli QuerySet zawiera jakiekolwiek wyniki, a Falsejeśli nie. To próbuje wykonać zapytanie w najprostszy i najszybszy możliwy sposób , ale wykonuje prawie to samo zapytanie, co zwykłe zapytanie QuerySet.


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

@Alex Lebedev: Tak, ta metoda będzie dostępna w Django 1.2. Dziękuję Ci.
Felix Kling


0

to działało dla mnie!

if some_queryset.objects.all (). exist (): print ("ta tabela nie jest pusta")

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.