Django orm

정현석·2021년 4월 27일
0

Select

Get

단일 행 결과를 반환하는 model.objects.get()은 Query Set이 아닌 단일행(모델타입)으로 출력됩니다.

  • value_name.column_name과 같이 . 으로 컬럼 이름을 써서 사용합니다.
  • get()안에 조건을 제시하여 사용합니다. (sql의 where절과 동일하게 사용)
  • get()은 단일행을 반환하므로 다른 method들을 get() 다음에 연결하여 사용할 수 없습니다.

value = model.objects.get(pk=pk)
print(value.name)

  • 만약 get을 사용하여 반환되는 값이 1개 이상인 경우 에러가 발생합니다.

All

전체 데이터를 불러오는 model.objcets.all()은 QuerySet타입으로 반환 됩니다.

  • dictionary를 사용하는 것과 동일하게 사용할 수 있습니다.

    value = model.objects.all()
    print(value[0]['name']

  • 만약 get()과 같이 단일 행의 결과가 존재하지 않을 경우 model.DoesNotExist의 exception으로 처리가 되지만 all()과 같이 여러 행이 나오는 경우엔 exception이 아닌 빈값으로 처리됩니다.

    Filter

    filter는 조건에 맞는 여러 행을 출력합니다.

  • model.objects.filter()로 QuerySet타입이 반환 됩니다.

    value = model.objects.all()
    print(value[0]['name']

get()과 filter는 조건을 걸어 사용할 수 있으며 조건은 and로 결합됩니다.

조건 키워드

__lt / __gt				보다 작다 / 보다 크다		
__lte / __gte 				같거나 보다 작다 / 같거나 보다 크다

ex ) model.objects.filter(id__gt=1) / 	id1보다 큰 자료 검색

__in 					주어진 리스트 안에 존재하는 자료 검색

ex ) model.objects.filter(id__in=[1,2,3]) / id1,2,3 인 데이터 검색

__year/__month/__day 			 해당 년,, 일 자료 검색

ex ) model.objects.filter(date__year=2020)

__isnull				해당 열의 값이 null인 데이터 검색

ex ) model.objects.filter(modelName__isnull=Ture)

__contains / __icontains 		해당 열의 값이 지정한 문자열을 포함하는 자료 검색

* __icontains 은 대소문자를 구별하지 않음

ex ) model.objects.filter(modelName__contains='now')


__startswith / __istartswith 		해당 열의 값이 지정한 문자열로 시작하는 데이터 검색

* __istartswith 는 대소문자를 구별하지 않음

ex ) model.objects.filter(modelName__startswith='p')

__endswith / __iendswith 		해당 열의 값이 지정한 문자열로 끝나는 데이터 검색

* __iendswith 는 대소문자를 구별하지 않음

ex ) model.objects.filter(modelName__endswith='s')

__range 				문자, 숫자, 날짜의 범위를 지정

* SQL BETWEEN에 해당

ex ) model.objects.filter(date__range=(start, end))
ex ) model.objects.filter(id__range=(1,10))

Order by

model.objects.order_by()로 사용하며 기본 정렬순서는 오름차순입니다. 내림차순으로 정렬할 경우 컬럼명 앞에 -를 붙여 사용합니다.

value = model.objects.order_by('-pk') # 내림차순 정렬
value = model.objects.order_by('pk') # 오름차순 정렬

Value

model.objects.values() 로 사용하며 sql의 select에 해당합니다. value를 사용하지 않으면 sql의 select * 와 같이 전체 컬럼을 출력합니다.

value = model.objects.values('pk', 'name') # query set 타입으로 pk, name을 출력

Aggregate

sql에서 max, min, count 등과 같이 다중 행을 단일 행으로 연산하여 출력해주는 기능을 합니다.

value = model.objects.aggregate(sum=Sum('price')) #sum은 사용자가 임의로 정합니다.
print(value['sum'])

Annotate

필드를 하나 만들어 거기에 내용을 연산된 값을 필드에 넣어주는 기능을 합니다.

value = model.objects.anntate(count=Count('name')) #count은 사용자가 임의로 정합니다.
print(value['count'])

profile
기록하는 벨로그

0개의 댓글

관련 채용 정보