backend django QuerySet, select_related, prefetch_related

eunji hwang·2020년 4월 14일
0

BACKEND-PYTHON-DJANGO

목록 보기
12/28
post-custom-banner

ORM

객체관계매핑(Object-Relational Mapping : ORM) 데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법. '가상' 객체 데이터 베이스 구축
출처 : wiki

단순하게 말해, 나는 python django에서 python 코드로 DB에 접근하여 조회, 생성, 수정, 삭제가 가능하다.

QuerySet

ORM에 Django models objects를 통해 반환되는 데이터베이스의 개체묶음을 말한다.


정참조와 역참조

  • 정참조 : ForeignKey(이하 FK)가 있는 모델(클래스, 테이블)에서 FK가 없는 모델을 참조할때
  • 역참조 : FK가 없는 모델에서 FK가 있는 모델을 참조할때
    • 테이블명소문자_set으로역참조 데이터에 접근할수 있다.
    • related_name으로 역참조 데이터에 접근할수 있다.

select_related는 QuerySet을 반환할때 ForeignKey, one to one, many to one인 모델을 함께 가져온다.(본인테이블 + 참조된 테이블(FK)를 가져온다) select_related를 사용하면 복잡해질수 있지만 모델을 재사용할 경우 추가적인 코드를 작성하지 않아도 된다.(DB서버가 종료되기 전까지 cache에 남아있는다. 즉 DB에 접근할때 마다 비용을 아낄 수 있다)

# values() 위치에는 get(), all(), filter()등 필요한 메서드를 적용한다.
변수 = 테이블명.objects.selected_related('참조할테이블명').values(참고할테이블명소문자_id=바라보고있는테이블의컬럼명)

# 가져온 쿼리셋을 list로 바꿔담으려면?
변수 = list(테이블명.objects.selected_related('table_name').values(culumn_name_id=culumn_name))
  • INNER JOIN으로 쿼리셋을 가져온다.
# values() 위치에는 get(), all(), filter()등 필요한 메서드를 적용한다.
테이블명.objects.selected_related('실제참조할테이블명').values(참고할테이블명소문자_id=바라보고있는테이블의컬럼명)
  • 모델별로 쿼리셋(select_related로 한번에 가져올것 2번에 걸처 가저옴으로 필요한 곳에 사용하기)을 가져온다.
  • many to one, many to many에 주로 사용 된다.
profile
TIL 기록 블로그 :: 문제가 있는 글엔 댓글 부탁드려요!
post-custom-banner

0개의 댓글