단일 행 결과를 반환하는 model.objects.get()은 Query Set이 아닌 단일행(모델타입)으로 출력됩니다.
value = model.objects.get(pk=pk)
print(value.name)
전체 데이터를 불러오는 model.objcets.all()은 QuerySet타입으로 반환 됩니다.
value = model.objects.all()
print(value[0]['name']
만약 get()과 같이 단일 행의 결과가 존재하지 않을 경우 model.DoesNotExist의 exception으로 처리가 되지만 all()과 같이 여러 행이 나오는 경우엔 exception이 아닌 빈값으로 처리됩니다.
filter는 조건에 맞는 여러 행을 출력합니다.
value = model.objects.all()
print(value[0]['name']
__lt / __gt 보다 작다 / 보다 크다
__lte / __gte 같거나 보다 작다 / 같거나 보다 크다
ex ) model.objects.filter(id__gt=1) / id가 1보다 큰 자료 검색
__in 주어진 리스트 안에 존재하는 자료 검색
ex ) model.objects.filter(id__in=[1,2,3]) / id가 1,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))
model.objects.order_by()로 사용하며 기본 정렬순서는 오름차순입니다. 내림차순으로 정렬할 경우 컬럼명 앞에 -를 붙여 사용합니다.
value = model.objects.order_by('-pk') # 내림차순 정렬
value = model.objects.order_by('pk') # 오름차순 정렬
model.objects.values() 로 사용하며 sql의 select에 해당합니다. value를 사용하지 않으면 sql의 select * 와 같이 전체 컬럼을 출력합니다.
value = model.objects.values('pk', 'name') # query set 타입으로 pk, name을 출력
sql에서 max, min, count 등과 같이 다중 행을 단일 행으로 연산하여 출력해주는 기능을 합니다.
value = model.objects.aggregate(sum=Sum('price')) #sum은 사용자가 임의로 정합니다.
print(value['sum'])
필드를 하나 만들어 거기에 내용을 연산된 값을 필드에 넣어주는 기능을 합니다.
value = model.objects.anntate(count=Count('name')) #count은 사용자가 임의로 정합니다.
print(value['count'])