CRUD
- Django는 Model을 정의하면 ORM을 통해서 데이터베이스에 데이터를 추가하고(Create) 조회하고(Read) 수정하고(Update) 삭제(Delete)할 수 있도록 하는 편리한 기능을 제공
- Model의 'objects'를 이용해서 수행
데이터 추가하기 (Create)
- 데이터를 추가하기 위해서는 import를 이용해서 먼저 사용할 Model을 불러 와야 함
from {app_name}.models import {model}
Create
- Create는 데이터 객체를 생성하고 데이터베이스에 반영하는 과정을 한 번에 할 수 있음
data_model = {model}.objects.create( {field_name}=value, ... )
# example
# food = Food.objects.create(price=10000)
save
- save를 이용하면 데이터 객체를 생성하는 타이밍과 실제로 데이터베이스에 반영하는 과정을 분리할 수 있음
data_model = {model}( {field_name}=value, ... )
data_model.save()
# example
# food = Food(price=10000)
# food.save()
데이터 조회하기 (Read)
- 데이터를 데이터베이스로 부터 읽어오는 것은 Django Model Manager인 objects를 통해서 할 수 있음
모든 데이터 조회
data = {model}.obejcts.all()
하나의 데이터 조회
- get()을 사용
- get을 사용했을때 조회 결과가 여러개라면 에러
data = {model}.objects.get(field=value)
조건에 맞는 여러 데이터 조회
- filter()를 사용
- 해당 필드 조건에 해당하는 모든 데이터를 가져오거나 아래에서 설명하는 조건 키워드를 함께 사용할 수 있음
data = {model}.objects.filter(field=value)
정렬해서 데이터 조회
- order_by()를 사용
- 두 개 이상의 필드를 함께 사용해서 정렬할 수 있으며 '-'를 사용해서 내림차순으로 정렬할 수 있음
data = {model}.objects.order_by('field_1', '-field_2')
# field_1을 기준으로 오름차순으로 정렬하고
# 그 결과를 다시 field_2를 기준으로 내림차순으로 정렬합니다.
데이터의 개수 세기
rows = {model}.objects.count()
특정 조건을 제외한 데이터 조회
data = {model}.objects.exclude(field=value)
# 특정 field가 value인 데이터를 제외한 모든 데이터를 조회합니다.
체인으로 연결해서 조회
- 여러가지 데이터 조회를 체인처럼 연결해서 사용할 수 있음
data = {model}.objects.filter(price=10000).order_by('name')
# 가격(price)이 10,000원인 데이터를 이름(name)으로 정렬해서 조회합니다.
data = data.order_by('name')
# 이렇게 적어도 위와 똑같은 명령을 수행합니다.
조건 키워드
{field_name}__{keyword}={condition} 형태로 사용
__exact, __iexact
- __exact는 대소문자를 구분해서 조건과 정확히 일치 하는지를 체크
- __iexact는 대소문자를 구분 하지 않고 일치하는 지를 체크
__contains, __icontains
- 지정한 문자열을 포함 하는지를 체크
- __icontains는 대소문자를 구분하지 않고 체크
__range
- 지정한 범위 내에 포함 되는지 체크
- 파이썬의 range와 비슷
공식문서
데이터 수정하기
- 수정할 데이터 객체를 가져온 다음 원하는 필드를 수정하고 save()를 호출하여 데이터베이스에 반영
데이터 삭제하기
- 데이터를 삭제하기 위해서는 삭제할 데이터 객체를 가져온 다음 delete()를 호출
공식문서