Django/inflearn

Column Lookup으로 복잡한 조건 탐색하기

곽수진 2022. 11. 5. 18:47
반응형
Column(Field) Lookup
→ Filter 조건을 사용하면 좀 더 복잡한 조건도 조회할 수 있음
→ filter, exclude 혹은 get 메소드 내에 검색을 원하는 필드명과 field lookup을 붙여서 값을 전달
→ 형태 : {field명}__{조건 키워드(lookup type)}

 

 

python manage.py shell : manage.py를 쉘로 실행

 

 

from third.models import Restaurant : third 웹 앱에 있는 models.py 파일에서 Restaurant class를 불러옴

Restaurant.objects.filter(name='Korean Food') : Restaurant 클래스에 있는 객체들 중 name 필드가 'Korean Food'인 쿼리를 불러옴

 

 

▶ Contains : 특정 키워드가 포함된 레코드를 조회

    → __exact를 붙여주지 않아도 별도의 조건을 달아주지 않으면 __exact 조건과 동일한 기능을 수행

Restaurant.objects.filter(name__contains='Korean').values() : name 필드에 'Korean' 키워드가 포함된 쿼리를 불러옴

 

 

Exact : 특정 키워드랑 정확하게 일치하는 레코드 조회

Restaurant.objects.filter(name__exact = 'Korean Food') : name 필드에 'Korean Food' 키워드가 정확하게 일치되는 쿼리를 불러옴

 

 

 

__gt : (greater than) 더 큰 레코드

__gte : (greater than + equal) 더 크거나 같은 레코드

__lt : (less than) 더 작은 레코드

__lte : (less than + equal) 더 작거나 같은 레코드

Restaurant.objects.filter(created_at__gt = '2018-01-01 00:00:00').values() : 작성된 일자가 2018년 1월 1일 00시 00분 00초보다 큰 쿼리를 불러옴

Restaurant.objects.filter(created_at__gte = '2018-01-01 00:00:00').values() : 작성된 일자가 2018년 1월 1일 00시 00분 00초보다 크거나 같은 쿼리를 불러옴

 

 

__startswith : 특정 문자열로 시작하는 레코드

__endswith : 특정 문자열로 종료되는 레코드

Restaurant.objects.filter(name__Startswith = 'Korean').values() : name 필드에 'Korean'으로 시작되는 쿼리를 불러옴

Restaurant.objects.filter(name__Startswith = 'Food').values() : name 필드에 'Food'으로 시작되는 쿼리를 불러옴

    → 'Food'로 시작되는 레코드는 존재하지 않아 빈 쿼리 출력

Restaurant.objects.filter(name__endswith = 'Food').values() : name 필드에 'Food'으로 종료되는 쿼리를 불러옴 

 

 

__in : 여러 값을 한 번에 검색 조건으로 걸 때 사용

Restaurant.objects.filter(id__in=[1,3]).values() : id 필드의 값이 1부터 3 사이인 쿼리를 불러옴

 

 

range : 특정 값 사이의 레코드를 조회

Restaurant.objects.filter(id__range=(2,3)).values() : id 필드의 값이 2부터 3 사이인 쿼리를 불러옴

반응형

'Django > inflearn' 카테고리의 다른 글

R : 리스트 구현하기  (0) 2022.11.07
데이터 수정/삭제하기  (0) 2022.11.06
페이징하기  (2) 2022.11.04
데이터 필터링하기  (0) 2022.11.03
데이터 조회하기  (0) 2022.11.02