WeStarbucks
Django의 QuerySet API를 사용해 데이터베이스와 소통해보자.
Query란 데이터베이스에 정보를 요청하는것을 말한다. python에서 작성된 코드가 SQL로 매핑되어 QuerySet이라는 자료 형태로 값이 전달된다.
장고의 QuerysetAPI는 내부적으로 QuerySet을 생성, 필터링, 슬라이스할 수 있으며 일반적으로 데이터베이스에 실제로 영향을 미치지 않고 전달할 수 있다. 쿼리 세트를 평가하기 전에는 데이터베이스 작업이 실제로 수행되지 않는다.
QuerySet API에서 제공하는 method중 자주 사용하는 method는 다음과 같다.
일반적으로 QuerySet과 상호 작용할 때 필터를 연결하여 사용하는데, 이 작업을 수행하기 위해 대부분의 QuerySet 메서드는 새 쿼리 집합을 반환한다.
<QuerySet [<Category: Category object (1)>, <Category: Category object (2)>]>
all()
, filter()
, exclude()
, values()
, values_list()
다음 QuerySet 메서드는 QuerySet을 평가하고 쿼리 집합이 아닌 다른 것을 반환한다.
이러한 메서드는 캐시를 사용하지 않고 호출될 때마다 데이터베이스를 쿼리한다.
<Category: Category object (1)> , 9 , True...
get()
, create()
, count()
, exists()
, update()
, delete()
, first()
, last()
pip3 install ipython
python3 manage.py -i ipython
from products.models import Menu, Category
스타벅스의 사이트의 메뉴에서는 음료 / 푸드 / 상품 / 카드 / 메뉴이야기 를 확인할 수 있다.
이 중 메뉴이야기를 제외한 음료 / 푸드 / 상품 / 카드만 생성해보자.
한 번에 개체를 만들고 모두 저장할 수 있는 편리한 방법이다. 다음과 같이 사용한다.
# create()사용
>>> Menu.Objects.create(name="음료")
# 또는
# save()사용
>>> a1 = Menu(name="푸드")
>>> a1.save()
제공된 객체 리스트를 데이터베이스에 삽입한다.
하지만 다음의 주의사항이 있다.
# bulk_create()사용
>>> Menu.object.bulk_create([
>>> Menu(name = "상품"), Menu(name="카드")])
데이터베이스에 잘 반영된 모습을 볼 수 있다.
현재 QuerySet또는 QuerySet하위 클래스의 복사본을 리턴한다.
주어진 파라미터와 매치되는 객체를 포함하고 있는 새 QuerySet을 리턴한다.
지정된 조회 매개 변수와 일치하는 개체를 반환한다.기본 키 또는 고유 제약 조건의 필드와 같이 고유하게 보장되는 검색을 사용해야 한다.