본문 바로가기
파이썬

파이썬 django의 queryset에서 첫 번째 객체를 얻는 가장 빠른 방법은 무엇입니까?

by º기록 2020. 10. 9.
반응형

종종 Django의 쿼리 셋에서 첫 번째 객체를 가져 오거나, 없으면 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 일 때 매우 메모리 집약적 인 일입니다.

단일 데이터베이스 호출로 예외 객체로 메모리를 뒤흔들 지 않고 어떻게이 작업을 수행 할 수 있습니까?

 

해결 방법

 


MyModel.objects.filter(blah=blah).first()

둘 다 결과 예외를 삼키고 쿼리 세트가 객체를 반환하지 않으면 None 을 반환합니다.


 

참조 페이지 https://stackoverflow.com/questions/5123839

 

 

반응형

댓글