[Django] QuerySet API

Bik_Kyun·2022년 3월 16일
0
post-thumbnail

1. Django QuerySet API

  • Django에 내장된 일반적인 데이터 관리 기능
  • 데이터 작업을 위한 포괄적인 메소드 제공

2. QuerySet 반환O vs 반환X

2-1. QuerySet 반환O

<QuerySet [<Category: Category object (1)>, <Category: Category object (2)>]>

all()

  • 한 테이블의 모든 레코드를 가져올 때 사용.
  • QuerySet 반환.
  • 각각의 QuerySet에는 인스턴스가 포함

1)

In: Category.objects.all()
Out : <QuerySet [<Category: Category object (0)>, <Category: Category object (1)>, <Category: Category object (2)>]>

2)

In : for category in Category.objects.all()
print(category.name)
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()

  • values()와 유사하나 dictionary를 반환하는 대신 반복될 때 튜플을 반환한다.
  • 각 튜플에는 values_list() 호출에 전달된 각 필드 또는 표현식의 값이 포함되어 있다.(첫 번째 항목이 첫 번째 필드)
In : Category.objects.filter(name='브루드커피').values_list()
Out : <QuerySet [(3, '브루드커피'), (4, '브루드커피')]>

2-2. QuerySet 반환X

<Category: Category object (1)> , 9 , True ..

create()

  • Table에 데이터를 추가해주는 메소드
  • 생성된 인스턴스를 반환한다.
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

Additional methods

  • get_or_create()
  • bulk_create()
  • count()
  • first()
  • last()
  • aggregate()
profile
비진

0개의 댓글