TIL Q 객체

finelinefe·2020년 11월 4일
0

PYTHON

목록 보기
5/6
post-thumbnail

Q 객체

filter() ,exclude() ,get() 등 조회함수에 복잡한 쿼리를 실행하고 싶을 때(하나 또는 하나 이상의 인자를 전달받고자 할 때) Q 객체를 사용하면 편리하다
django.db.models.Q = & (and) | (or) 연산자와 조합하여 사용할 수 있다


사용하기에 앞서

Q 객체를 사용하기에 앞서 장고에서 지원해주는 것을 불러오기 한다.

from django.db.models import Q

조건 키워드 목록

  • __lt/__gt = ~보다 작다, 크다
  • __lte/__gte = 같거나 작다, 크다
  • __in = 리스트 안에 존재하는 값 검색
  • __year/__month/__day = 해당 년도와 월 일 검색
  • __isnull = 해당 열의 null 값 검색
  • __contains = 해당 열값이 정한 문자열을 포함하는것 검색
  • __startswith = 해당 열값이 정한 문자열로 시작하는 것 검색
  • __endswith = 해당 열값이 정한 문자열로 끝나는 것 검색
  • __range = 문자나 숫자, 날짜의 범위 지정

OR



from django.db.models import Q   # Q 객체를 사용하기 위해서는 장고에서 import 해야한다.
example.objects.filter(Q(name = "sarah") | Q(no = 1))

SELECT * FROM example WHERE no = 1 OR name = "sarah"; # 이 SQL 문과 동일하다

AND

from django.db.models import Q

product.objects.filter(Q (name = "kim") & Q (last_name = "mina")

SELECT * FROM product WHERE name = "kim" AND last_name = "mina"

NOT

from django.db.models import Q

q = Q()
q.add(Q(no = 1), q.OR)
q.add(Q(name = Sarah) & ~Q(name = Lee), q.AND)

question.objects.filter(q)


SELECT * FROM question WHERE no = 1 AND name = 'Sarah' AND NOT (name = "Lee")

❗️Q 조건 연결

Q 객체를 선언한 이후, .OR, .AND 등과 같은 .connector를 사용해 연결할 수 있다.
이전에 선언된 객체와 연결되는데 만일 선언하지 않았을때의 기본값은 AND.

첫 선언 이후 .add()로 추가할 때 2번째 인자값은 어떤 쿼리로 연결할지를 나타내는데 그것은 거기에 선언된 값으로 앞 조건과 연결이 된다

from django.db.models import Q

q = Q(no = 100)
q.add(Q(no = 1000), q.OR)

score.objects.filter(q)

SELECT * FROM score no =100 or no=1000

Q 객체정리글
코딩도장 Q
초보 코딩 덕후 Q 객체

profile
Backend Developer

0개의 댓글