Django 008 | WeStarbucks #2 QuerySet API

This Is Empty.·2021년 9월 13일
0

Django

목록 보기
8/20

WeStarbucks

  1. Django 007 | WeStarbucks #1 Products app

WeStarbucks

Django의 QuerySet API를 사용해 데이터베이스와 소통해보자.

QuerySet API란?

Query란 데이터베이스에 정보를 요청하는것을 말한다. python에서 작성된 코드가 SQL로 매핑되어 QuerySet이라는 자료 형태로 값이 전달된다.
장고의 QuerysetAPI는 내부적으로 QuerySet을 생성, 필터링, 슬라이스할 수 있으며 일반적으로 데이터베이스에 실제로 영향을 미치지 않고 전달할 수 있다. 쿼리 세트를 평가하기 전에는 데이터베이스 작업이 실제로 수행되지 않는다.

자주 사용되는 Model Method

QuerySet API에서 제공하는 method중 자주 사용하는 method는 다음과 같다.

QuerySets을 반환하는 Method

일반적으로 QuerySet과 상호 작용할 때 필터를 연결하여 사용하는데, 이 작업을 수행하기 위해 대부분의 QuerySet 메서드는 새 쿼리 집합을 반환한다.
<QuerySet [<Category: Category object (1)>, <Category: Category object (2)>]>

  • all() , filter() , exclude() , values() , values_list()

QuerySets을 반환하지 않는 Method

다음 QuerySet 메서드는 QuerySet을 평가하고 쿼리 집합이 아닌 다른 것을 반환한다.
이러한 메서드는 캐시를 사용하지 않고 호출될 때마다 데이터베이스를 쿼리한다.
<Category: Category object (1)> , 9 , True...

  • get() , create() , count() , exists() , update() , delete() , first() , last()

Django Shell

  • Django Shell을 깔끔하게 만들어주는 라이브러리인 ipython 설치
pip3 install ipython
  • 사용
python3 manage.py -i ipython
  • 작성한 모델 클래스 import (Django shell)
from products.models import Menu, Category

CREATE 예제


스타벅스의 사이트의 메뉴에서는 음료 / 푸드 / 상품 / 카드 / 메뉴이야기 를 확인할 수 있다.
이 중 메뉴이야기를 제외한 음료 / 푸드 / 상품 / 카드만 생성해보자.

Create()

한 번에 개체를 만들고 모두 저장할 수 있는 편리한 방법이다. 다음과 같이 사용한다.

# create()사용
>>> Menu.Objects.create(name="음료")
# 또는

save()

# save()사용
>>> a1 = Menu(name="푸드")
>>> a1.save()

bulk_create()

제공된 객체 리스트를 데이터베이스에 삽입한다.
하지만 다음의 주의사항이 있다.

  • 다대다 관계에서는 작동하지 않는다.
  • 다중 테이블 상속 시나리오의 자식 모델에서는 작동하지 않는다.
  • 모델의 save()메소드는 호출되지 않는다. 그리고 pre_save와 post_save시그널도 전송되지 않는다.
  • 모델의 기본 키가 AutoField인 경우 기본 키 속성은 특정 데이터베이스(현재 Postgre)에서만 검색할 수 있다. SQL 및 MariaDB 10.5+). 다른 데이터베이스에서는 설정되지 않는다.
  • 개체에 수동으로 설정된 PK가 없어여 사용할 수 있다.
# bulk_create()사용
>>> Menu.object.bulk_create([
>>> Menu(name = "상품"), Menu(name="카드")])

데이터베이스에 잘 반영된 모습을 볼 수 있다.

READ 예제

all()

현재 QuerySet또는 QuerySet하위 클래스의 복사본을 리턴한다.

filter()

주어진 파라미터와 매치되는 객체를 포함하고 있는 새 QuerySet을 리턴한다.

get()

지정된 조회 매개 변수와 일치하는 개체를 반환한다.기본 키 또는 고유 제약 조건의 필드와 같이 고유하게 보장되는 검색을 사용해야 한다.

참고
QuerySet API reference

profile
Convinced myself, I seek not to convince.

0개의 댓글