Django models模型-條件查詢

條件查詢
(1) 查詢等

exact:表示判等。
例:查詢編號爲1的圖書。 
list=BookInfo.objects.filter(id__exact=1)可簡寫爲: 
list=BookInfo.objects.filter(id=1)

(2) 模糊查詢contains:是否包含。

例:查詢書名包含'傳'的圖書。 
list = BookInfo.objects.filter(btitle__contains='傳')
startswith、endswith:以指定值開頭或結尾。
例:查詢書名以'部'結尾的圖書 
list = BookInfo.objects.filter(btitle__endswith='部')
注:以上運算符都區分大小寫,在這些運算符前加上 i 表示不區分大小寫,如 iexact、icontains、istartswith、iendswith.

(3) 空查詢isnull:是否爲null。

例:查詢書名不爲空的圖書。 
list = BookInfo.objects.filter(btitle__isnull=False)

(4) 範圍查詢

in:是否包含在範圍內。例:查詢編號爲1或3或5的圖書 
list = BookInfo.objects.filter(id__in=[1,3,5])

(5) 比較查詢gt、gte、lt、lte:大於、大於等於、小於、小於等於。

例:查詢編號大於3的圖書 
list = BookInfo.objects.filter(id__gt=3)
不等於的運算符,使用exclude()過濾器。
例:查詢編號不等於3的圖書 
list = BookInfo.objects.exclude(id=3)6) 
日期查詢year、month、day、week_day、hour、minute、second:對日期時間類型的屬性進行運算。
例:查詢1980年發表的圖書。 
list = BookInfo.objects.filter(bpub_date__year=1980)
例:查詢1980年1月1日後發表的圖書。 
list = BookInfo.objects.filter(bpub_date__gt=date(1990,1,1))

F對象


之前的查詢都是對象的屬性與常量值比較,兩個屬性怎麼比較呢? 答:使用F對象,被定義在django.db.models中。
語法如下:f(屬性名)
例:查詢閱讀量大於等於評論量的圖書。 
from django.db.models import F 
list = BookInfo.objects.filter(bread__gte=F('bcomment'))
可以在F對象上使用算數運算。
例:查詢閱讀量大於2倍評論量的圖書。 
list = BookInfo.objects.filter(bread__gt=F('bcomment') *2)

Q對象


多個過濾器逐個調用表示邏輯與關係,同sql語句中where部分的and關鍵字。
例:查詢閱讀量大於20,並且編號小於3的圖書。 
list=BookInfo.objects.filter(bread__gt=20,id__lt=3) 或 list=BookInfo.objects.filter(bread__gt=20).filter(id__lt=3)如果需要實現邏輯或or的查詢,需要使用Q()對象結合|運算符,Q對象被義在django.db.models中。
語法如下: Q(屬性名__運算符=值)例:查詢閱讀量大於20的圖書,改寫爲Q對象如下。 
from django.db.models import Q 
list = BookInfo.objects.filter(Q(bread__gt=20))
Q對象可以使用&、|連接,&表示並且,|表示或。
例:查詢閱讀量大於20,或編號小於3的圖書,只能使用Q對象實現 
list = BookInfo.objects.filter(Q(bread__gt=20) | Q(pk__lt=3))
Q對象前可以使用~操作符,表示非not。例:查詢編號不等於3的圖書。 
list = BookInfo.objects.filter(~Q(pk=3))exclude() 也是取反 
list = BookInfo.objects.exclude(id=3) 
list = BookInfo.objects.exclude(id__exact=3)
聚合函數
使用aggregate()過濾器調用聚合函數。聚合函數包括:Avg,Count,Max,Min,Sum,被定義在django.db.models中。
例:查詢圖書的總閱讀量。 
from django.db.models import Sum 
list = BookInfo.objects.aggregate(Sum('bread'))
注意aggregate的返回值是一個字典類型,格式如下: 
{'屬性名__聚合類小寫':值} 
如:{'bread__sum':3}
使用count時一般不使用aggregate()過濾器。
例:查詢圖書總數。 
list = BookInfo.objects.count()
注意count函數的返回值是一個數字。

Django ORM區分大小寫查詢

mysql排序規則中,utf8_general_ci 不區分大小寫,utf8-bin、utf8_general_cs 區分大小寫

rysetall.extra(where=['binary employee_id=%s'], params=[employee_id])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章