인프런 파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 강의를 보고 정리한 내용입니다.
Model Manager
데이터베이스 질의 인터페이스를 제공
디폴트 Manager로서 ModelCls.objects가 제공
아래처럼 사용
1
2
3
ModelCls.objects.all()
ModelCls.objects.all().order_by('-id')[:10]
ModelCls.objects.create(title="New Title")
QuerySet
SQL을 생성해주는 인터페이스
순회가능한 객체
Model Manager를 통해, 해당 Model에 대한 QuerySet을 획은
- Post.object.all() … → “SELECT * FROM Post”
- Post.objects.create(…) “INSERT INTO …”
QuerySet의 Lazy한 특성이 있음
무슨 의미인가 하면, 아무리 아래처럼 쿼리 셋에 조건을 추가해도 아직 실제로 쿼리를 날리지는 않는다.
1
qs = Post.objects.all().order_by('-id')[:2}
실제로 쿼리를 해서 데이터를 가져오는 시점은 qs를 호출할 때이다. (실제로 데이터가 필요할 때)
Query는 Chaining 가능
Post.objects.all(…).filter.exclude(…).filter(…) → QuerySet
- 마치 mongoDB의 aggregation pipeline
enter를 쳐서 line을 구분하려면 아래처럼 backslash를 넣어주어야 함
Query Set 모델객체 획득
queryset[숫자인덱스]
- 모델객체 혹은 없으면 예외발생 (IndexError)
1
queryset.get(...)
- 모델객체 혹은 없으면 예외발생 (DoesNotExist, MultipleObjectsReturned)
1
queryset.first()
- 모델객체 혹은 None
1
queryset.last()
- 모델객체 혹은 None
예시