7.4.1增加數據
(1)save()
通過創建模型類對象,執行對象的save()方法保存到數據庫中
如:
>>> from booktest.models import BookInfo,HeroInfo
>>> from datetime import date
>>> book = BookInfo( btitle='西遊記', bput_date=date(1988,1,1), bread=10, bcomment=10 )
>>> book.save()
(2)create
通過模型類.objects.create()保存
如:
>>> HeroInfo.objects.create( hname='沙悟淨', hgender=0, hbook=book )
7.4.2查詢
(1)基本查詢
get 查詢單一結果,如果不存在會拋出模型類.DoesNotExist異常。
all 查詢多個結果。
count 查詢結果數量。
如:
>>> BookInfo.objects.get(id=3)
<BookInfo: 笑傲江湖>
(2)過濾查詢
實現SQL中的where功能,包括
- filter 過濾出多個結果
- exclude 排除掉符合條件剩下的結果
- get 過濾單一結果
語法:屬性名稱__比較運算符=值
注意:屬性名稱和比較運算符間使用兩個下劃線,所以屬性名不能包括多個下劃線
多個過濾器逐個調用表示邏輯與關係,同sql語句中where部分的and關鍵字
如:
# 查詢閱讀量大於20,並且編號小於3的圖書。
BookInfo.objects.filter(bread__gt=20,id__lt=3) 或 BookInfo.objects.filter(bread__gt=20).filter(id__lt=3)
1)相等
exact:表示判等。如判斷id是否等於1,可直接簡寫爲id=1
2)模糊查詢
contains:是否包含
startswith、endswith:以指定值開頭或結尾。
3)空查詢
isnull:是否爲null
4)範圍查詢
in:是否包含在範圍內。在[ ]中寫範圍的值
如:
#查詢編號爲1或3或5的圖書
BookInfo.objects.filter(id__in=[1, 3, 5])
5)比較查詢
- gt 大於 (greater then)
- gte 大於等於 (greater then equal)
- lt 小於 (less then)
- lte 小於等於 (less then equal)
不等於的運算符,使用exclude()過濾器
6)日期查詢
year、month、day、week_day、hour、minute、second:對日期時間類型的屬性進行運算
如:
#查詢1980年發表的圖書。
BookInfo.objects.filter(bpub_date__year=1980)
#查詢1980年1月1日後發表的圖書。
BookInfo.objects.filter(bpub_date__gt=date(1990, 1, 1))
7)F對象
使用F對象可以將兩個屬性進行比較,F對象被定義在django.db.models中。並 且,可以在F對象上使用算數運算。
語法:F(屬性名)
如:
# 查詢閱讀量大於等於評論量的圖書
from django.db.models import F
BookInfo.objects.filter(bread__gte=F('bcomment'))
# 查詢閱讀量大於2倍評論量的圖書。
BookInfo.objects.filter(bread__gt=F('bcomment') * 2)
8)Q對象
如果需要實現邏輯或or的查詢,需要使用Q()對象結合|運算符,Q對象被義在django.db.models中
語法:Q(屬性名__運算符=值)
Q對象可以使用&、|連接,&表示邏輯與,|表示邏輯或。Q對象前可以使用~操作符,表示非not。
如:
# 查詢閱讀量大於20,或編號小於3的圖書
BookInfo.objects.filter(Q(bread__gt=20) | Q(pk__lt=3))
9)聚合函數
使用aggregate()過濾器調用聚合函數。聚合函數包括:Avg 平均,Count 數量,Max 最大,Min 最小,Sum 求和,被定義在django.db.models中。
注意:aggregate的返回值是一個字典類型,格式爲: {'屬性名__聚合類小寫':值}
使用count時一般不使用aggregate()過濾器
(3)排序
使用order_by對結果進行排序
BookInfo.objects.all().order_by('bread') # 升序
BookInfo.objects.all().order_by('-bread') # 降序
(4)關聯查詢
1)由一到多的訪問語法
一對應的模型類對象.多對應的模型類名小寫_set
如:
b = BookInfo.objects.get(id=1)
b.heroinfo_set.all()
2)由多到一的訪問語法
多對應的模型類對象.多對應的模型類中的關係類屬性名
如:
h = HeroInfo.objects.get(id=1)
h.hbook
3)訪問一對應的模型類關聯對象的id語法
多對應的模型類對象.關聯類屬性_id
如:
h = HeroInfo.objects.get(id=1)
h.hbook_id
(5)關聯過濾查詢
1)由多模型類條件查詢一模型類數據語法
關聯模型類名小寫__屬性名__條件運算符=值
注意:如果沒有"__條件運算符"部分,表示等於
2)由一模型類條件查詢多模型類數據語法
一模型類關聯屬性名__一模型類屬性名__條件運算符=值
注意:如果沒有"__條件運算符"部分,表示等於
7.4.3修改
(1)save
修改模型類對象的屬性,然後執行save()方法
如:
hero = HeroInfo.objects.get(hname='豬八戒')
hero.hname = '豬悟能' hero.save()
(2)update
使用模型類.objects.filter().update(),會返回受影響的行數
如:
HeroInfo.objects.filter(hname='沙悟淨').update(hname='沙僧')
7.4.4刪除
(1)模型類對象delete
如:
hero = HeroInfo.objects.get(id=13)
hero.delete()
(2)模型類.objects.filter().delete()
如:
HeroInfo.objects.filter(id=14).delete()