0

存在を確認し、可能であればオブジェクトを取得したい場合、次のどの方法がより高速ですか? より慣用的な?なぜ?私がリストした 2 つの例のいずれでもない場合、他にどのようにこれを行うのでしょうか?

if Object.objects.get(**kwargs).exists():
    my_object = Object.objects.get(**kwargs)


my_object = Object.objects.filter(**kwargs)
if my_object:
    my_object = my_object[0]

関連する場合は、mysql と postgres が気になります。

4

2 に答える 2

4

複数のクエリ/クエリを回避するために、try/except ブロックでこれを実行しないのはなぜですか?

try:
    obj = Object.objects.get(**kwargs)
except Object.DoesNotExist:
    pass

例外の下にelseロジックを追加するだけです。

于 2013-03-27T21:07:25.713 に答える
2

django はかなり良い概要を提供しますexists

ドキュメントによると、最初の例を使用すると、クエリが2回実行されます。

some_queryset がまだ評価されていないが、ある時点で評価されることがわかっている場合、 some_queryset.exists() を使用すると、単純な作業よりも全体的な作業が多くなります (存在チェックのための 1 つのクエリと、後で結果を取得するための追加のクエリ)。 bool(some_queryset) を使用して結果を取得し、結果が返されたかどうかを確認します。

したがって、オブジェクトを使用する場合は、存在を確認した後、ドキュメントでは、それを使用して1回評価を強制することを提案しています

if my_object:
  pass
于 2013-03-27T21:05:26.090 に答える