web-dev-qa-db-ja.com

Djangoクエリの存在を確認

In Djangoクエリにエントリが存在するかどうかを確認する方法

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

これはPHPで行われた方法でした

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

count() を使用します。

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

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

上の利点len()は、QuerySetがまだ評価されていないことです。

count()は、舞台裏でSELECT COUNT(*)を実行するため、すべてのレコードをPythonにロードするのではなく、常にcount()を使用する必要がありますオブジェクトおよび結果の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():
    ....
_

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

66
Felix Kling

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