종종 장고의 쿼리 세트에서 첫 번째 객체를 가져 오거나 반환하려고합니다. None
없는 경우 합니다. 이 작업을 수행하는 모든 방법이 많이 있습니다. 그러나 어느 것이 가장 성능이 좋은지 궁금합니다.
qs = MyModel.objects.filter(blah = blah)
if qs.count() > 0:
return qs[0]
else:
return None
이로 인해 두 번의 데이터베이스 호출이 발생합니까? 낭비 인 것 같습니다. 이게 더 빠릅니까?
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-test 일 때 메모리를 많이 사용하는 작업입니다.
단 하나의 데이터베이스 호출로 예외 개체와 함께 메모리를 제거하지 않고 어떻게 할 수 있습니까?
first()
및 last()
편리한 방법 : docs.djangoproject.com/en/dev/ref/models/querysets/#first
len()
쿼리 셋 에는 사용하지 말고 항상을 사용하십시오.count()
.