TIL 22 | QuerySet Method

임종성·2021년 7월 19일
0

Django

목록 보기
4/17
post-thumbnail

Django의 QuerySet API는 데이터 작업을 위한 포괄적인 method를 제공한다. Django에 내장된 데이터 관리 기능으로서 QuerySet Method를 살펴보자.

values()

values()는 Instance가 아닌 Dictionary로 이루어진 QuerySet을 Return해준다. 각각의 Dictionary는 Instance를 나타내고 그 Key는 사용자가 지정한 Field만 포함한다. 예를 들어 지난번에 생성한 Nutrition Table을 살펴보면 다음과 같다.

Id를 포함해 10개의 field를 담고있는데, 우리는 이중 Caffeine, Sodluim, Sugar에 대한 정보만 필요하다. 이 때 values()를 사용하여 다음과 같은 QuerySet을 도출할 수 있다.

각 Dictionary가 feild를 Key로, 그 값을 Value로 가지는 것을 알 수 있다.

values_list()

values()가 사용자가 원하는 column의 key, value 쌍을 가지는 dictionary로 된 list를 가져온다면, value_list()는 value만 가진 tuple 형태의 list를 가져온다.

aggregate()

Aggregate()는 QuerySet을 통해 계산된 평균, 합계 등의 값을 Dictionary 형태로 Return 해준다.

예를 들어 Nutrition Table의 모든 Object에 대해 sugar의 합계를 알고 싶다고 가정해보자. 다음과 같이 aggregate() method를 사용하자.

Sum_Sugar=Sum('sugar')와 같이 Keyword Argument를 통해 Return하는 Aggregation Value의 이름을 변경할 수 있다.

update()

지정한 필드에 대해 업데이트를 수행하고 수행한 행의 수를 return 한다.

get_or_create()

get_or_create() Method는 구하려 하는 객체가 존재할 경우 객체를 Get 하고, 존재하지 않을 경우 Create 한다. (object, created) 형식의 Tuple을 return하며, object는 우리가 얻고자 한 모델의 instance, create는 Boolean Flag이다.

Instance가 get_or_create()에 의해 생성되었다면 True를 return하고, 기존 Database에서 get했다면 False를 return한다.

처음 명령어를 통해 create 하여 True를 반환하고, 그 다음에는 이미 생성되었기에 False를 반환한다.

delete()

delete()는 QuerySet의 모든 행에 대해 삭제 쿼리를 수행하고, 삭제 된 object 수와 object 유형 별 삭제 횟수가 있는 Dictionary를 return한다.

만약 delete 되는 행을 누군가 foreignKey로 참조하고 있다면, on_delete=CASCADE를 통해 같이 삭제된다.

profile
어디를 가든 마음을 다해 가자

0개의 댓글