Python 10.Django框架 10.2.3:數(shù)據(jù)庫基礎操作

一枢泰、CUD
1 增加
增加數(shù)據(jù)有兩種方法舰攒。

1)save
通過創(chuàng)建模型類對象券敌,執(zhí)行對象的save()方法保存到數(shù)據(jù)庫中扩然。

>>> from book.models import BookInfo,PeopleInfo

>>> book = BookInfo(

...        name='python入門',

...        pub_date='2010-1-1'

...    )

>>> book.save()

>>> book

<BookInfo: python入門>

2)create
通過模型類.objects.create()保存守伸。

>>> PeopleInfo.objects.create(

...        name='itheima',

...        book=book

...    )

<PeopleInfo: itheima>

2 修改
修改更新有兩種方法

1)save
修改模型類對象的屬性萍程,然后執(zhí)行save()方法


>>> person = PeopleInfo.objects.get(name='itheima')

>>> person.name = 'itcast'

>>> person.save()

>>> person

<PeopleInfo: itcast>

2)update
使用模型類.objects.filter().update()壮不,會返回受影響的行數(shù)

>>> PeopleInfo.objects.filter(name='itcast').update(name='傳智播客')

1

3 刪除
刪除有兩種方法

1)模型類對象delete

>>> person = PeopleInfo.objects.get(name='傳智播客')

>>> person.delete()

(1, {'book.PeopleInfo': 1})

2)模型類.objects.filter().delete()

>>> BookInfo.objects.filter(name='python入門').delete()

(1, {'book.BookInfo': 1, 'book.PeopleInfo': 0})

二血淌、R
1 基本查詢
get查詢單一結(jié)果,如果不存在會拋出模型類.DoesNotExist異常谓厘。

all查詢多個結(jié)果。

count查詢結(jié)果數(shù)量寸谜。

>>> 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()

2 過濾查詢
實現(xiàn)SQL中的where功能竟稳,包括

filter過濾出多個結(jié)果

exclude排除掉符合條件剩下的結(jié)果

get過濾單一結(jié)果

對于過濾條件的使用,上述三個方法相同,故僅以filter進行講解他爸。

過濾條件的表達語法如下:

屬性名稱__比較運算符=值

屬性名稱和比較運算符間使用兩個下劃線聂宾,所以屬性名不能包括多個下劃線

1)相等
exact:表示判等。

例:查詢編號為1的圖書诊笤。

BookInfo.objects.filter(id__exact=1)

可簡寫為:

BookInfo.objects.filter(id=1)

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

說明:如果要包含%無需轉(zhuǎn)義,直接寫即可讨跟。

例:查詢書名包含'傳'的圖書纪他。

BookInfo.objects.filter(name__contains='傳')

<QuerySet [<BookInfo: 射雕英雄傳>]>

startswith、endswith:以指定值開頭或結(jié)尾晾匠。

例:查詢書名以'部'結(jié)尾的圖書

BookInfo.objects.filter(name__endswith='部')

<QuerySet [<BookInfo: 天龍八部>]>

以上運算符都區(qū)分大小寫茶袒,在這些運算符前加上i表示不區(qū)分大小寫,如iexact凉馆、icontains薪寓、istartswith、iendswith.

3) 空查詢
isnull:是否為null澜共。

例:查詢書名為空的圖書向叉。

BookInfo.objects.filter(name__isnull=True)

<QuerySet []>

4) 范圍查詢
in:是否包含在范圍內(nèi)。

例:查詢編號為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年發(fā)表的圖書冗栗。

BookInfo.objects.filter(pub_date__year=1980)

<QuerySet [<BookInfo: 射雕英雄傳>]>

例:查詢1990年1月1日后發(fā)表的圖書。

BookInfo.objects.filter(pub_date__gt='1990-1-1')

<QuerySet [<BookInfo: 笑傲江湖>]>

三供搀、F和Q對象
F對象
之前的查詢都是對象的屬性與常量值比較隅居,兩個屬性怎么比較呢? 答:使用F對象葛虐,被定義在django.db.models中胎源。

語法如下:

F(屬性名)

例:查詢閱讀量大于等于評論量的圖書。

from django.db.models import F

BookInfo.objects.filter(readcount__gt=F('commentcount'))

<QuerySet [<BookInfo: 雪山飛狐>]>

可以在F對象上使用算數(shù)運算屿脐。

例:查詢閱讀量大于2倍評論量的圖書涕蚤。

BookInfo.objects.filter(readcount__gt=F('commentcount')*2)

<QuerySet [<BookInfo: 雪山飛狐>]>

Q對象
多個過濾器逐個調(diào)用表示邏輯與關系宪卿,同sql語句中where部分的and關鍵字。

例:查詢閱讀量大于20万栅,并且編號小于3的圖書佑钾。

BookInfo.objects.filter(readcount__gt=20,id__lt=3)

<QuerySet [<BookInfo: 天龍八部>]>

或者

BookInfo.objects.filter(readcount__gt=20).filter(id__lt=3)

<QuerySet [<BookInfo: 天龍八部>]>

如果需要實現(xiàn)邏輯或or的查詢,需要使用Q()對象結(jié)合|運算符烦粒,Q對象被義在django.db.models中休溶。

語法如下:

Q(屬性名__運算符=值)

例:查詢閱讀量大于20的圖書,改寫為Q對象如下扰她。

BookInfo.objects.filter(Q(readcount__gt=20))

Q對象可以使用&兽掰、|連接,&表示邏輯與义黎,|表示邏輯或禾进。

例:查詢閱讀量大于20,或編號小于3的圖書廉涕,只能使用Q對象實現(xiàn)

BookInfo.objects.filter(Q(readcount__gt=20)|Q(id__lt=3))

<QuerySet [<BookInfo: 射雕英雄傳>, <BookInfo: 天龍八部>, <BookInfo: 雪山飛狐>]>

Q對象前可以使用~操作符泻云,表示非not。

例:查詢編號不等于3的圖書狐蜕。

BookInfo.objects.filter(~Q(id=3))

<QuerySet [<BookInfo: 射雕英雄傳>, <BookInfo: 天龍八部>, <BookInfo: 雪山飛狐>]>

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宠纯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子层释,更是在濱河造成了極大的恐慌婆瓜,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贡羔,死亡現(xiàn)場離奇詭異廉白,居然都是意外死亡,警方通過查閱死者的電腦和手機乖寒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門猴蹂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人楣嘁,你說我怎么就攤上這事磅轻。” “怎么了逐虚?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵聋溜,是天一觀的道長。 經(jīng)常有香客問我叭爱,道長撮躁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任买雾,我火速辦了婚禮把曼,結(jié)果婚禮上缨称,老公的妹妹穿的比我還像新娘。我一直安慰自己祝迂,他們只是感情好,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布器净。 她就那樣靜靜地躺著型雳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪山害。 梳的紋絲不亂的頭發(fā)上纠俭,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機與錄音浪慌,去河邊找鬼冤荆。 笑死,一個胖子當著我的面吹牛权纤,可吹牛的內(nèi)容都是我干的钓简。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼汹想,長吁一口氣:“原來是場噩夢啊……” “哼外邓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起古掏,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤损话,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后槽唾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丧枪,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年庞萍,在試婚紗的時候發(fā)現(xiàn)自己被綠了拧烦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡挂绰,死狀恐怖屎篱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情葵蒂,我是刑警寧澤交播,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站践付,受9級特大地震影響秦士,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜永高,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一隧土、第九天 我趴在偏房一處隱蔽的房頂上張望提针。 院中可真熱鬧,春花似錦曹傀、人聲如沸辐脖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗜价。三九已至,卻和暖如春幕庐,著一層夾襖步出監(jiān)牢的瞬間久锥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工异剥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瑟由,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓冤寿,卻偏偏與公主長得像歹苦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子疚沐,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 定義模型類模型類被定義在"應用/models.py"文件中暂氯。模型類必須繼承自Model類,位于包django.db...
    LiWei_9e4b閱讀 1,641評論 0 1
  • 在ORM框架中亮蛔,它幫我們把類和數(shù)據(jù)表進行了一個映射痴施,可以讓我們通過類和類對象就能操作它所對應的表格中的數(shù)據(jù)。 dj...
    越大大雨天閱讀 3,190評論 0 1
  • MVT圖解 項目準備 創(chuàng)建項目 創(chuàng)建應用 更換python解釋器:按需選擇 安裝應用 本地化 模板路徑在應用同級目...
    阿孝不會飛閱讀 779評論 0 2
  • MVC MVT M:Model究流,模型辣吃,和MVC中M功能相同,和數(shù)據(jù)庫進行交互V:View芬探,視圖神得,和MVC中C功能相...
    努力爬行中的蝸牛閱讀 416評論 0 0
  • 簡介 查詢集表示從數(shù)據(jù)庫中獲取的對象集合。查詢集可以含有零個偷仿、一個或多個過濾器哩簿。過濾器基于所給的參數(shù)限制查詢的結(jié)果...
    a上癮閱讀 1,241評論 0 0