字段查詢
實現(xiàn)sql中where的功能遇汞,調(diào)用過濾器filter()软驰、exclude()卵洗、get()请唱,下面以filter()為例。
語法如下:
?????????? 屬性名稱__比較運算符=值
注:屬性名稱和比較運算符間使用兩個下劃線过蹂,所以屬性名不能包括多個下劃線十绑。
查詢mysql數(shù)據(jù)庫日志
查看mysql數(shù)據(jù)庫日志可以查看對數(shù)據(jù)庫的操作記錄。
mysql日志文件默認(rèn)沒有產(chǎn)生酷勺,需要做如下配置:
??????????????????????? sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
把68本橙,69行前面的#去除,然后保存并使用如下命令重啟mysql服務(wù)脆诉。
??????????????????????? sudo service mysql restart
使用如下命令打開mysql日志文件甚亭。
?????????????????????? sudo tail -f /var/log/mysql/mysql.log#可以實時查看數(shù)據(jù)庫的日志內(nèi)容
打開booktest/views.py文件,在index視圖中編寫如下查詢代碼:
?????????????????????? ? ? ? ?? 條件查詢
(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:以指定值開頭或結(jié)尾。
例:查詢書名以'部'結(jié)尾的圖書
??????????? list = BookInfo.objects.filter(btitle__endswith='部')
注:以上運算符都區(qū)分大小寫啰挪,在這些運算符前加上? i? 表示不區(qū)分大小寫信不,如 iexact、icontains亡呵、istartswith抽活、iendswith.
(3) 空查詢
isnull:是否為null。
例:查詢書名不為空的圖書锰什。
?????????? list = BookInfo.objects.filter(btitle__isnull=False)
(4) 范圍查詢
in:是否包含在范圍內(nèi)下硕。
例:查詢編號為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:對日期時間類型的屬性進(jìn)行運算柬甥。
例:查詢1980年發(fā)表的圖書。
???????????? list = BookInfo.objects.filter(bpub_date__year=1980)
例:查詢1980年1月1日后發(fā)表的圖書其垄。
???????????? 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對象上使用算數(shù)運算棒口。
例:查詢閱讀量大于2倍評論量的圖書。
???????????? list = BookInfo.objects.filter(bread__gt=F('bcomment') *2)
Q對象
多個過濾器逐個調(diào)用表示邏輯與關(guān)系辜膝,同sql語句中where部分的and關(guān)鍵字无牵。
例:查詢閱讀量大于20,并且編號小于3的圖書厂抖。
???????????? list=BookInfo.objects.filter(bread__gt=20,id__lt=3)? 或? list=BookInfo.objects.filter(bread__gt=20).filter(id__lt=3)
如果需要實現(xiàn)邏輯或or的查詢茎毁,需要使用Q()對象結(jié)合|運算符,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對象實現(xiàn)
???????????? 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)
聚合函數(shù)
使用aggregate()過濾器調(diào)用聚合函數(shù)颅悉。聚合函數(shù)包括: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()過濾器。
例:查詢圖書總數(shù)傍药。
????????????? list = BookInfo.objects.count()
注意count函數(shù)的返回值是一個數(shù)字磺平。