1. ホーム
  2. python

[解決済み] Django はクエリに存在するかどうかをチェックします。

2022-12-23 03:11:15

質問

django では、クエリに対してエントリが存在するかどうかを確認する方法は?

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

phpではこんな感じでした。

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

どのように解決するのですか?

あなたは exists() :

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

リターン True は、QuerySet が何らかの結果を含んでいる場合、そして False となります。これはクエリを実行しようとするものです を最もシンプルで高速な方法で実行しようとします。 しかし、これは通常の QuerySet クエリとほぼ同じクエリを実行します。

古いバージョンです。 (<1.2)

使用方法 count() :

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

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

に対する利点は、例えば len() の利点は、QuerySet がまだ評価されていないことです。

count() が実行されます。 SELECT COUNT(*) を実行するので、常に count() を使うべきで、むしろ全てのレコードを Python オブジェクトにロードして len() を呼び出すのではありません。

このことを念頭に置きながら クエリセットが評価されるとき は一読の価値があります。


もし、あなたが get() を使用すると、例えば scorm.objects.get(pk=someid) で、そのオブジェクトが存在しない場合は ObjectDoesNotExist 例外が発生します。

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