장고에서는 ORM을 사용해 데이터베이스에 접근할 수 있다. 이렇게 쿼리를 직접 작성하지 않고 API 메서드를 이용해서 데이터베이스와 통신을 추상화하는 객체를 쿼리셋(QuerySet)이라고 한다.
MyModel.objects
과 같이 특정 모델의 뒤에 .objects
를 붙이면 해당 모델의 테이블과 상호작용하는 진입점이 생성된다. 이제 쿼리셋 API를 사용하면 객체가 쿼리를 실행하고 새로운 쿼리셋이나 데이터를 반환한다. 자주 사용하는 것들을 알아보자.
all()
: 모든 데이터를 담은 쿼리셋을 반환.values()
: 원하는 속성을 딕셔너리로 반환values_list()
: 원하는 속성을 튜플로 반환filter()
: 조건과 일치하는 쿼리셋 반환exclude()
: 조건과 일치하지 않는 쿼리셋 반환annotate()
: 집계함수를 사용하여 새로운 속성을 쿼리셋에 추가get()
: 조건과 일치하는 단 하나의 값을 반환order_by()
: 특정 필드를 기준으로 정렬exists()
: 조건을 만족하는 데이터의 유무 확인create()
: 인자로 받은 데이터 생성update()
: 인자로 받은 데이터 수정delete()
: 조건을 만족하는 데이터 삭제주의할 점이 있다. 쿼리셋을 반환하는 메서드만 체이닝이 가능하다. 체이닝이란 이런 것을 말한다.
MyModel.objects.filter(name="musk").order_by("-created_at")
이렇게 여러 메서드를 사용해서 원하는 SQL명령을 실행할 수 있다.