장고에서는 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명령을 실행할 수 있다.