增加
增加數據有兩種方法。
-
save
通過創建模型類對象,執行對象的save()方法保存到數據庫中。
from book.models import BookInfo,PeopleInfo book = BookInfo( name='python入門', pub_date='2010-1-1' ) book.save() book <BookInfo: python入門>
-
create
通過模型類.objects.create()保存。
PeopleInfo.objects.create( name='itheima', book=book ) <PeopleInfo: itheima>
修改
修改更新有兩種方法
-
save
修改模型類對象的屬性,然後執行save()方法
person = PeopleInfo.objects.get(name='itheima') person.name = 'itcast' person.save() person <PeopleInfo: itcast>
-
update
使用模型類.objects.filter().update(),會返回受影響的行數
PeopleInfo.objects.filter(name='itcast').update(name='H_sen') 1
刪除
刪除有兩種方法
- 模型類對象delete
person = PeopleInfo.objects.get(name='H_sen')
person.delete()
(1, {'book.PeopleInfo': 1})
- 模型類.objects.filter().delete()
BookInfo.objects.filter(name='python入門').delete()
(1, {'book.BookInfo': 1, 'book.PeopleInfo': 0})
查詢
基本查詢
-
get 查詢單一結果,如果不存在會拋出模型類.DoesNotExist異常。
-
all 查詢多個結果。
-
count 查詢結果數量。
BookInfo.objects.get(id=1)
<BookInfo: 射鵰英雄傳>
BookInfo.objects.get(pk=2)
<BookInfo: 天龍八部>
BookInfo.objects.get(pk=20)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/python/.virtualenvs/py3_django_1.11/lib/python3.5/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/python/.virtualenvs/py3_django_1.11/lib/python3.5/site-packages/django/db/models/query.py", line 380, in get
self.model._meta.object_name
book.models.DoesNotExist: BookInfo matching query does not exist.
BookInfo.objects.all()
<QuerySet [<BookInfo: 射鵰英雄傳>, <BookInfo: 天龍八部>, <BookInfo: 笑傲江湖>, <BookInfo: 雪山飛狐>]>
BookInfo.objects.count()
4
過濾查詢
實現SQL中的where功能,包括
-
filter過濾出多個結果
-
exclude排除掉符合條件剩下的結果
-
get過濾單一結果
對於過濾條件的使用,上述三個方法相同,故僅以filter進行講解。
過濾條件的表達語法如下:
屬性名稱__比較運算符=值
# 屬性名稱和比較運算符間使用兩個下劃線,所以屬性名不能包括多個下劃線
查詢編號爲1的圖書
查詢書名包含'湖'的圖書
查詢書名以'部'結尾的圖書
查詢書名爲空的圖書
查詢編號爲1或3或5的圖書
查詢編號大於3的圖書
查詢1980年發表的圖書
查詢1990年1月1日後發表的圖書
1. 相等
exact:表示判等。
例:查詢編號爲1的圖書。
BookInfo.objects.filter(id__exact=1)
可簡寫爲:
BookInfo.objects.filter(id=1)
2. 模糊查詢
contains:是否包含。
說明:如果要包含%無需轉義,直接寫即可。
例:查詢書名包含’傳’的圖書。
BookInfo.objects.filter(name__contains='傳')
<QuerySet [<BookInfo: 射鵰英雄傳>]>
startswith、endswith:以指定值開頭或結尾。
例:查詢書名以’部’結尾的圖書
BookInfo.objects.filter(name__endswith='部')
<QuerySet [<BookInfo: 天龍八部>]>
以上運算符都區分大小寫,在這些運算符前加上i表示不區分大小寫,
如iexact、icontains、istartswith、iendswith.
3. 空查詢
isnull:是否爲null。
例:查詢書名爲空的圖書。
BookInfo.objects.filter(name__isnull=True)
<QuerySet []>
4. 範圍查詢
in:是否包含在範圍內。
例:查詢編號爲1或3或5的圖書
BookInfo.objects.filter(id__in=[1,3,5])
<QuerySet [<BookInfo: 射鵰英雄傳>, <BookInfo: 笑傲江湖>]>
5. 比較查詢
-
gt大於 (greater then)
-
gte大於等於 (greater then equal)
-
lt小於 (less then)
-
lte小於等於 (less then equal)
例:查詢編號大於3的圖書
BookInfo.objects.filter(id__gt=3)
不等於的運算符,使用exclude()過濾器。
例:查詢編號不等於3的圖書
BookInfo.objects.filter(id__gt=3)
<QuerySet [<BookInfo: 雪山飛狐>]>
6. 日期查詢
year、month、day、week_day、hour、minute、second:對日期時間類型的屬性進行運算。
例:查詢1980年發表的圖書。
BookInfo.objects.filter(pub_date__year=1980)
<QuerySet [<BookInfo: 射鵰英雄傳>]>
例:查詢1990年1月1日後發表的圖書。
BookInfo.objects.filter(pub_date__gt='1990-1-1')
<QuerySet [<BookInfo: 笑傲江湖>]>