Django QuerySet 정리

won·2023년 1월 18일

프로젝트를 리팩토링 해야 하는데 django의 queryset에 대한 이해가 부족한 것 같아 정리를 해본다.
아직 제대로 query를 사용하지 못하는 것 같다. 정리를 하면서 리팩토링을 해야지!

Field Lookup

  • field lookups are how you specify the meat of an SQL WHERE clause(절:구문)
  • Basic lookups keyword arguments take the form 'field_lookuptype = value'

필드 룩업은 장고에서 SQL문을 검색할때 사용하는 방법이다.
아래와 같이 사용할 수 있다.

# SELECT * FROM book_list WHERE pub_date <= '2022-01-01';
-> Book.objects.filter(pub_data__lte = '2022-01-01')

#SELECT ...WHERE name ILIKE 'python backend';
-> Book.objects.get(name__iexact ='python backend')
# ILIKE and iexact에서 i는 ignore , 즉 대소문자 구문 무시

#SELECT ... WHERE headline LIKE '%python%';
-> Book.objects.get(headline__contain='python')
# LIKE는 부분적으로 일치하는 컬럼을 찾을 때 사용된다.

#SELECT ... WHERE id IN (1,3,4);
-> Book.objects.filter(id__in = [1,3,4])

#SELECT ... WHERE user.id IN (SELECT id FROM ... WHERE NAME LIKE '%django%')
inner_qs = USER.objects.filter(name__contains='django')
books_list  = Book.objects.fileter(user = inner_qs)

여기서 제일 마지막 쿼리문이 흥미로웠다.
inner_qs에 query문을 저장한 뒤 원하는 곳에서 filter의 조건으로 사용을 하다니
지금까지 한번도 해본적 없는 방법이었는데 리팩토링때 사용해야겠다.

쿼리를 조인 할 때도 필드룩업을 사용한다.

Books.objects.filter(lib__location = 'seoul')
# lib은 Foreign Key / lib의 location이 서울인것을 가져온다.

Complex Lookup은 Q라는 장고 모델을 사용해서 데이터를 찾는다.

from django.db.models import Q

####자료출처 : 유튜버 미쿡엔지니어

profile
어찌저찌 굴러가는 개발자

0개의 댓글