Django 모델을 통한 조회 (기초)

자기개발자·2022년 4월 27일

Model Manager

데이터베이스 질의 인터페이스를 제공

디폴트 Manager로서 ModelCls.objects가 제공

아래처럼 사용

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한 특성이 있음

무슨 의미인가 하면, 아무리 아래처럼 쿼리 셋에 조건을 추가해도 아직 실제로 쿼리를 날리지는 않는다.

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)
queryset.get(...)
  • 모델객체 혹은 없으면 예외발생 (DoesNotExist, MultipleObjectsReturned)
queryset.first()
  • 모델객체 혹은 None
queryset.last()
  • 모델객체 혹은 None

예시

조건 추가

profile
Self Refiner

0개의 댓글