filter
, exclude
, get
과 같은 함수를 함께 사용하여 복잡한 조건 검색을 효율적으로 사용 가능하다.
model.objects.filter(Q(flag=True) | Q(model_num__gt=1), name__startswith="Q")
from django.db.models import Q
Album.objects.filter(Q(price<777) | Q(wating>7))
SELECT * FROM album WHERE price < 777 OR wating > 7
q = Q()
q.add(Q(price=777), q.OR)
q.add(Q(name='아이유' | Q(name='아이린'), q.AND)
q.add(Q(1000), q.OR)
Album.objects.filter(q)
SELECT * FROM Album WHERE (price=777 AND (name='아이유' OR name='아이린')) OR price=1000
q = Q()
q.add(Q(price=777), q.OR)
q.add(Q(name='아이유') & ~Q(name='아이린'), q.AND)
Album.objects.filter(q)
SELECT & FROM products WHERE price=777 AND name='아이유' AND NOT (name='아이린')
- 쿼리 수를 줄여준다.
- Race condition을 회피할 수 있다.
쓰레드
와 유사.- python을 사용하지 않아도 DB에 접근 가능하다.
artist = Album.objects.get(user_id=1)
artist.count = F('count') + 1
artist.save()
artist.artist.name = '아이유'
artist.save()
- F()는 각 저장마다 적용!!!
위의 예시에서
첫 count가 1이면, 마지막 artist.save()를 통과하면 3이된다.
즉, 상관없는 필드를 수저하고 저장하더라도 F()의 값이 수정된다.