djangoでクエリのエントリが存在するかどうかを確認する方法
sc=scorm.objects.filter(Header__id=qp.id)
これはphpで行われた方法でした
if(mysql_num_rows($resultn)) {
// True condition
}
else {
// False condition
}
回答:
使用count()
:
sc=scorm.objects.filter(Header__id=qp.id)
if sc.count() > 0:
...
たとえばに対する利点len()
は、QuerySetがまだ評価されていないことです。
count()
はSELECT COUNT(*)
舞台裏で実行されるため、count()
すべてのレコードをPythonオブジェクトにロードlen()
して結果を呼び出すのではなく、常に使用する必要があります。
これを念頭に置いて、QuerySetsが評価されるときは読む価値があります。
get()
たとえばscorm.objects.get(pk=someid)
、を使用し、オブジェクトが存在しない場合、ObjectDoesNotExist
例外が発生します。
from django.core.exceptions import ObjectDoesNotExist
try:
sc = scorm.objects.get(pk=someid)
except ObjectDoesNotExist:
print ...
更新:
使用することも可能exists()
です:
if scorm.objects.filter(Header__id=qp.id).exists():
....
True
QuerySetに結果が含まれているかどうか、含まれていない場合は返しますFalse
。これは、可能な限り最も単純で最速の方法でクエリを実行しようとしますが、通常のQuerySetクエリとほぼ同じクエリを実行します。
if scorm.objects.filter(Header__id=qp.id).exists()
Django 1.2以降、次のものを使用できますexists()
。
https://docs.djangoproject.com/en/dev/ref/models/querysets/#exists
if some_queryset.filter(pk=entity_id).exists():
print("Entry contained in queryset")
.objects.get(pk=...)
ルートよりも速いようです
これは私のために働いた!
some_queryset.objects.all()。exists()の場合:print( "このテーブルは空ではありません")