9
djangoのクエリセットから最初のオブジェクトを取得する最速の方法は?
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回のデータベース呼び出しだけで、例外オブジェクトを使用してメモリをチャーンしないでください。