django QuerySet API 참조 공식문서 GO
Django QuerySet API는 데이터 작업을 위한 포괄적인 메서드를 제공한다. 즉, Django에 내장 된 일반적인 데이터 관리 기능을 말하며 일반적으로 자주 사용되는 Model method를 다룬다. 정확하게는 QuerySet method라고 한다.
Model method의 실행 결과는 QuerySet을 반환하거나 그렇지 않은 경우가 있다.
<QuerySet [<Category: Category object (1)>, <Category: Category object (2)>]>
all()
한 테이블의 모든 레코드를 가져온다. 그 결과로 QuerySet을 반환하며, 그 안에는 각각 인스턴스가 포함되어 있다.
In : Category.objects.all() Out : <QuerySet [<Category: Category object (2)>, <Category: Category object (3)>, <Category: Category object (4)>]> In : for category in Category.objects.all() print(category.name) #아래와 같이 인스턴스들이 담겨 있는 QuerySet이 반환되기 때문에 모든 속성에 접근해서 데이터를 관리할 수 있다. Out : 티 브루드커리 브루드커피 콜드브루 콜드브루
filter()
& exclude()
한 테이블의 특정 레코드를 가져온다. filter(**kwargs)
는 키워드 인자로 주어진 lookup 조건에 일치하는 레코드들의 QuerySet을 반환.
# case1 In : Category.objects.filter(name='브루드커피') Out : [<Category: Category object (3)>, <Category: Category object (4)>] # case2 In : Category.objects.filter(name='브루드커피').filter(id=3) Out : [<Category: Category object (3)>] # case3 In : Category.objects.filter(name='브루드커피').exclude(id=3) Out : [<Category: Category object (4)>]
values()
iterable로 사용될 때 모델 인스턴스가 아닌 dictionary을 포함하는 QuerySet을 반환.
In : Category.objects.filter(name='브루드커피') Out : [<Category: Category object (3)>, <Category: Category object (4)>] In : Category.objects.filter(name='브루드커피').values() Out : <QuerySet [{'id': 3, 'name': '브루드커피'}, {'id': 4, 'name': '브루드커피'}]>
values_list()
dictionary를 반환하는 대신 반복 될 때 튜플을 반환한다는 점을 제외하면 values()와 유사하다. 각 튜플에는 values_list()
호출에 전달 된 각 필드 또는 표현식의 값이 포함되어 있으므로 첫 번째 항목이 첫 번째 필드다.
In : Category.objects.filter(name='브루드커피').values_list() Out : <QuerySet [(3, '브루드커피'), (4, '브루드커피')]>
annotate()
aggregate()
<Category: Category object (1)>
,9
,True ..
create()
Table에 데이터를 추가(INSERT). 생성된 인스턴스를 반환해준다.
In : Category.objects.create(name='콜드브루') Out : <Category: Category object (1)> #category 변수에 반환된 값을 저장하고, 생성된 data를 사용할 수 있다. #인스턴스로 반환되므로 category.name으로 class 안에 변수에 접근할 수 있다. In : category = Category.objects.create(name='콜드브루') In : category.name Out : '콜드브루' 참고) save method : INSERT 또는 UPDATE Category(name='콜드브루').save()
get()
지정된 조회 매개 변수와 일치하는 인스턴스를 반환. 이 매개 변수는 필드 조회에 설명된 형식이어야한다.
In : Category.objects.get(id=1) Out : <Category: Category object (1)>
update()
지정된 필드에 대해 업데이트 쿼리를 수행하고 일치하는 행 수를 반환. 일부 행에 이미 새 값이있는 경우 업데이트 된 행 수와 같지 않을 수 있다.
In : Category.objects.filter(name='탄산').update(name='콜드브루') Out : 2 #총 업데이트된 row 개수
delete()
QuerySet의 모든 행에 대해 SQL 삭제 쿼리를 수행하고, 삭제 된 개체 수와 개체 유형별 삭제 횟수가 있는 dictionary를 반환.
In : Category.objects.filter(name='qp').delete() Out : (1, {'products.Category': 1})
save()
INSERT 또는 UPDATE 를 수행하는 method. 단일 객체에 대해서 업데이트를 수행할 때 많이 사용된다.
In : category = Category.objects.get(id=2) Out : <Category: Category object (2)> In : category.name Out : '브루드커피' In : category.name = 'new name' In : category.save() In : category.name Out : 'new name'
exists()
filter()와 함께 서용해서 filter 조건에 맞는 데이터가 있는지 조회, 존재하면 True 존재하지 않으면 False를 반환한다.
In : Category.objects.filter(name='브루드커피').exists() Out : True
get_or_create()
,bulk_create()
,count()
,first()
,last()
,aggregate()