Django 模型類—查詢
讓其產生mysql.log,即是mysql的日誌文件,裏面記錄的對MySQL數據庫的操作記錄。
(1)使用下面的命令打開mysql 的配置文件,去除68,69行的註釋,然後保存。
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
打開之後輸入68,然後按G
(2)重啟mysql服務,就會產生mysql日誌文件。
sudo service mysql restart
(3)打開MySQL的日誌文件。
/var/log/mysql/mysql.log是MySQL的日誌文件所在的位置。
使用下面的命令可以實時查看mysql的日誌文件:
sudo tail -f /var/log/mysql/mysql.log
2.查詢函數
通過模型類.objects屬性可以調用如下函數,實現對模型類對應的數據表的查詢。
(1)進入虛擬交互環境
(2)查詢函數
(a)get示例:BookInfo.objects.get(id=1)
(b)all示例:BookInfo.objects.all()
(c)filter示例:
條件格式:模型類屬性名__條件名=值 (雙下劃線)
1)判等 條件名:exact
BookInfo.objects.get(id__exact=1) #標準寫法
BookInfo.objects.get(id=1) #簡寫
2)模糊查詢 條件名:contains
BookInfo.objects.filter(btitle__contains=‘傳‘) #帶傳字查詢
3)endswith結尾,starswitch開頭
BookInfo.objects.filter(btitle__endswith=‘部‘)
4)空查詢 isnull
BookInfo.objects.filter(btitle__isnull=False) #查詢不為空的書名
5)範圍查詢 in
數據庫命令:select * from booktext_bookinfo where id in (1,2,3);
BookInfo.objects.filter(id__in=[1,2,3])
6)比較查詢
gt(greate than) lt(less than) gte(大於等於) lte(小於等於)
select * from booktest_bookinfo where id>3;
BookInfo.objects.filter(id__gt=3)
7)日期查詢
BookInfo.objects.filter(bpub_date__year=1980) #1980年發表的書
from datetime import date
BookInfo.objects.filter(bpub_date__gt=date(1999,2,5)) #查詢1999,2,5號後發表的書
(d)exclude方法示例:
BookInfo.objects.exclude(id=3)
(e)order_by方法示例:
BookInfo.objects.all().order_by(‘id‘) #從小到大
BookInfo.objects.order_by(‘id‘)
BookInfo.objects.all().order_by(‘-id‘) #從大到小
BookInfo.objects.order_by(‘-id‘)
BookInfo.objects.filter(id__gt=3).order_by(‘bread‘) #從大到小
3.F對象
作用:用於類屬性之間的比較
使用之前需要先導入:
from django.db.models import F
BookInfo.objects.filter(bread__gt=F(‘bcomment‘)) #閱讀量大於評論量
BookInfo.objects.filter(bread__gt=F(‘bcomment‘) * 2) #閱讀量大於評論量
4.Q對象
作用:用於查詢時條件之間的邏輯關系。not and or,可以對Q對象進行& | ~
BookInfo.objects.filter(idgt=3,breadgt=3)
BookInfo.objects.filter(Q(idgt=3) & Q(breadgt=3)) #與關系
BookInfo.objects.filter(Q(idgt=3) | Q(breadgt=3)) #或關系
BookInfo.objects.filter( ~Q(bread__gt=3)) #非關系
5.聚合函數
作用:對查詢結果進行聚合
sum count avg max min
(1)aggregate:調用這個函數來使用聚合。返回值是一個字典
使用前需先導入聚合類:
from django.db.models import Sum,Count,Max,Min,Avg
BookInfo.objects.all().aggregate(Count(‘id‘)) #查詢所有圖書的數目
BookInfo.objects.aggregate(Sum(‘bread‘)) #查詢所有圖書閱讀量的總和
(2)count 函數 返回值是一個數字
作用:統計滿足條件數據的數目
例:
BookInfo.objects.all().count()
BookInfo.objects.count() #統計所有圖書的數目
BookInfo.objects.filter(id__gt=3).count() #id大於3的所有圖書的數目
6.總結
Django 模型類—查詢