DjangoのNone
クエリセットから最初のオブジェクトを取得するか、何もない場合は戻りたいことがよくあります。これを行う方法はたくさんありますが、すべてうまくいきます。しかし、私はどちらが最もパフォーマンスが良いのかと思っています。
qs = MyModel.objects.filter(blah = blah)
if qs.count() > 0:
return qs[0]
else:
return None
これにより、2つのデータベース呼び出しが発生しますか?それは無駄に思えます。これはもっと速いですか?
qs = MyModel.objects.filter(blah = blah)
if len(qs) > 0:
return qs[0]
else:
return None
別のオプションは次のとおりです。
qs = MyModel.objects.filter(blah = blah)
try:
return qs[0]
except IndexError:
return None
これにより、単一のデータベース呼び出しが生成されます。しかし、多くの場合、例外オブジェクトを作成する必要があります。これは、本当に必要なのが些細なifテストだけである場合に、非常にメモリを集中的に使用することです。
これを行うには、1回のデータベース呼び出しだけで、例外オブジェクトを使用してメモリをチャーンしないでください。
first()
とlast()
:便利なメソッドdocs.djangoproject.com/en/dev/ref/models/querysets/#first
len()
、クエリセットでは使用せず、常にを使用してください.count()
。