exists
を使用する方が高速ですが、それほど明白ではありません。
import logging
l = logging.getLogger('django.db.backends')
l.setLevel(logging.DEBUG)
l.addHandler(logging.StreamHandler())
User.objects.filter(pk=1).exists()
get_object_or_404(User, pk=1)
# (0.000) SELECT (1) AS "a" FROM "users" WHERE "users"."id" = 1 LIMIT 1; args=(1,)
# (0.001) SELECT "users"."id", "users"."password", ... FROM "users" WHERE "users"."id" = 1; args=(1,)
次に、答えが明らかになりました。彼らはほとんど同じクエリを持っていますが、get_object_or_404
はテーブル内のすべての列を取得しますが、exist
はone
しか取得しません。しかしこれは大したことではありません。
get_object_or_404(MyModel, pk=pk)
を使用して
HTTP 404が存在しないかどうかを確認しますか? – Ben
@Ben利用できないデータがHttp404を返す必要がある場合は – Muthuvel
'get_object_or_404'を使用してください - これはそのためです! – Ben