1. 程式人生 > >077:【Django資料庫】Q表示式詳解

077:【Django資料庫】Q表示式詳解

Q表示式詳解:

如果想要實現所有價格高於100元,並且評分達到9.0以上評分的圖書。那麼可以通過以下程式碼來實現:

books = Book.objects.filter(price__gte=100,rating__gte=9)

以上這個案例是一個並集查詢,可以簡單的通過傳遞多個條件進去來實現。

但是如果想要實現一些複雜的查詢語句,比如要查詢所有價格低於10元,或者是評分低於9分的圖書。那就沒有辦法通過傳遞多個條件進去實現了。這時候就需要使用 Q表示式 來實現了。示例程式碼如下:

from django.db.models import Q
books = Book.objects.filter(Q(price__lte=10) | Q(rating__lte=9))

以上是進行或運算,當然還可以進行其他的運算,比如有 & 和 ~(非) 等。一些用 Q 表示式的例子如下:

from django.db.models import Q
# 獲取id等於3的圖書
books = Book.objects.filter(Q(id=3))
# 獲取id等於3,或者名字中包含文字"記"的圖書
books = Book.objects.filter(Q(id=3)|Q(name__contains("")))
# 獲取價格大於100,並且書名中包含"記"的圖書
books = Book.objects.filter(Q(price__gte=100)&Q(name__contains("
"))) # 獲取書名包含“記”,但是id不等於3的圖書 books = Book.objects.filter(Q(name__contains='') & ~Q(id=3))

例項程式碼截圖: