Djangoはクエリに存在するものをチェックします


回答:


87

使用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():
    ....

TrueQuerySetに結果が含まれているかどうか、含まれていない場合は返しますFalse。これは、可能な限り最も単純で最速の方法でクエリを実行しようとしますが、通常のQuerySetクエリとほぼ同じクエリを実行します。


51
if scorm.objects.filter(Header__id=qp.id).exists()
アレクサンドルレベデフ

@Alex Lebedev:はい、このメソッドはDjango1.2で利用できるようになります。ありがとうございました。
Felix Kling

183

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")

25
これは受け入れられた答えでなければなりません。一般に、exists()はcount()よりも大幅に高速です。
frmdstryr 2016年

1
また、.objects.get(pk=...)ルートよりも速いようです
ブラッドソロモン

0

これは私のために働いた!

some_queryset.objects.all()。exists()の場合:print( "このテーブルは空ではありません")

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.