Skip to content

Instantly share code, notes, and snippets.

@KimSoungRyoul
Created August 17, 2020 08:17
Show Gist options
  • Save KimSoungRyoul/2f398898132f02a559d890b5704f0fa8 to your computer and use it in GitHub Desktop.
Save KimSoungRyoul/2f398898132f02a559d890b5704f0fa8 to your computer and use it in GitHub Desktop.
Django QuerySet 구성요소 간단하게
from django.db.model.sql import Query # Query()는 개발자가 정의한 QuerySet을 읽어서 실제 SQL을 생성해주는 구현체다
class QuerySet:
query: Query = Query() # 이것을 나는 메인쿼리 라고 명명한다.
_result_cache: List[Dict[Any,Any]] = dict() # SQL의 수행결과를 여기 저장해놓고 재사용한다 (QuerySet Cache)
# QuerySet 재호출시 이 프로퍼티에 저장된 데이터가 없으면 SQL을 호출해서 데이터를 가져온다.
_prefetch_related_lookups: Tuple[str] = () # prefetch_related(여기선언된 값들) 을 이 프로퍼티에 저장함
# 이것을 나는 추가쿼리(셋)이라고 명명한다.
_iterable_class = ModelIterable # sql결과값(resultset)을 python의 어떤 자료구조로 반환받을것인가? 를 선언하는 프로퍼티
# 이 값은 직접 수정하지 않고 QuerySet.values() .values_list()를 사용하면 알아서 변한다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment