TIL. QuerySet is lazy??

wonseok2877·2021년 7월 8일
0

공식문서를 보다가 QuerySet이 lazy하다는 글을 봤다. 무슨 말이지? 싶었다.

핵심부터 말하자면, django ORM은 각 instance에 직접 접근할 때 비로소 쿼리문을 던진다는 것이다.

django ORM(object relational mapping)은 매핑을 하고 DB에 요청을 한다.

User.objects.all()은 아직 DB에 요청을 한 게 아니다.

all_users = User.objects.all()도 아직 DB에 요청을 한 게 아니다.

print(all_users)가 되어야 DB에 요청을 하게 된다.

QuerySet만 lazy하다!

instance를 직접 가져오는 get이나, 뒤져봐야 하는 exists 등은 함수를 호출하는 동시에 query문을 던지게 된다.

반면 QuerySet을 가져오는 all, filter, exclude등은 함수를 호출한다고 해서 query문을 던지지 않는다.

대신 해당 QuerySet에 대한 정보에 접근할 때, 즉 print를 하는 등 사소하게라도 값에 접근하려고 할 때에야 query문을 진다.

생각과 질문

profile
백엔드 지망생 (벨로그 탈주각 재는중)

0개의 댓글