[Django]模型学习记录篇--基础
模型學(xué)習(xí)記錄篇,僅僅自己學(xué)習(xí)時(shí)做的記錄!!!
實(shí)現(xiàn)模型變更的三個(gè)步驟:
- 修改你的模型(在models.py文件中)。
- 運(yùn)行python manage.py makemigrations ,為這些修改創(chuàng)建遷移文件
- 運(yùn)行python manage.py migrate ,將這些改變更新到數(shù)據(jù)庫(kù)中。
模型字段類型:
a)??? FileField and FieldFile
模型執(zhí)行查詢
注:模型執(zhí)行查詢語(yǔ)句寫在view中函數(shù)中
基礎(chǔ):
- 每個(gè)模型都是django.db.models.Model 的一個(gè)Python 子類。
- 模型的每個(gè)屬性都表示數(shù)據(jù)庫(kù)中的一個(gè)字段。
- Django 提供一套自動(dòng)生成的用于數(shù)據(jù)庫(kù)訪問(wèn)的API;詳見執(zhí)行查詢。
?
通過(guò)模型中的管理器構(gòu)造一個(gè)查詢集,來(lái)從你的數(shù)據(jù)庫(kù)中獲取對(duì)象。
從SQL 的角度,查詢集和SELECT 語(yǔ)句等價(jià),過(guò)濾器是像WHERE 和LIMIT 一樣的限制子句。你可以從模型的管理器那里取得查詢集。每個(gè)模型都至少有一個(gè)管理器,它默認(rèn)命名為objects。通過(guò)模型類來(lái)直接訪問(wèn)它,
一般查詢集(相當(dāng)于select * from LOrder):
LOrder.objects #模型管理器, 通過(guò)模型中的管理器構(gòu)造一個(gè)查詢集,來(lái)從你的數(shù)據(jù)庫(kù)中獲取對(duì)象.
注: 可以在每個(gè)模型類中重命名它們。在模型中定義一個(gè)值為models.Manager()的屬性,來(lái)重命名管理器。
LOrder.objects.all() #獲取一個(gè)表中所有對(duì)象,這是最簡(jiǎn)單的方式
過(guò)濾查詢集 (相當(dāng)于select * from LOrder where +條件語(yǔ)句):
LOrder.objects.filter(查詢參數(shù)) #獲取一個(gè)表中滿足查詢參數(shù)的對(duì)象,
例: LOrder.objects.filter(serv_id='121768152983'),意為查詢LOrder數(shù)據(jù)標(biāo)識(shí)serv_id字段下為121768152983的一行信息
LOrder.objects.exclude(查詢參數(shù)) #獲取一個(gè)表中不滿足查詢參數(shù)的對(duì)象,執(zhí)行與filter相反的結(jié)果
注:了解上面兩種模型執(zhí)行查詢方法后,可以試著鏈?zhǔn)讲樵兎绞?/p>
LOrder.objects.get(查詢參數(shù)) #獲取一個(gè)表中滿足查詢參數(shù)的單一對(duì)象,
值得注意的是,使用get() 和使用filter() 的切片[0] 有一點(diǎn)區(qū)別。如果沒有結(jié)果滿足查詢,get() 將引發(fā)一個(gè)DoesNotExist 異常。這個(gè)異常是正在查詢的模型類的一個(gè)屬性 —— 所以在上面的代碼中,如果沒有主鍵為1 的Entry 對(duì)象,Django 將引發(fā)一個(gè)Entry.DoesNotExist。
類似地,如果有多條記錄滿足get() 的查詢條件,Django 也將報(bào)錯(cuò)。這種情況將引發(fā)MultipleObjectsReturned,它同樣是模型類自身的一個(gè)屬性。
限制查詢集(相當(dāng)于select * from LOrder limit 10):
LOrder.objects.all()[1:10:2] #獲取一個(gè)表中1到10行且每隔2行的對(duì)象
字段查詢集:
LOrder.objects.filter(completed_time__lte='2015-12-01') #篩選出字段completed_time__lte小于2015-12-01的數(shù)據(jù)
LOrder.objects.filter(completed_time__gte='2015-12-01') #篩選出字段completed_time__lte大于2015-12-01的數(shù)據(jù)
注: exclude中l(wèi)te是大于,gte是小于
LOrder.objects.filter(completed_time__exact='2014-11-21 17:29:21') #exact是精確匹配
LOrder.objects.filter(completed_time__contains ='2015') # contains是模糊匹配,相當(dāng)于like’%2015%’
注:iexact,和icontains是不區(qū)分大小寫,上面的區(qū)分大小寫
注1: 一般來(lái)說(shuō),只有在“請(qǐng)求”查詢集的結(jié)果時(shí)才會(huì)到數(shù)據(jù)庫(kù)中去獲取它們。
注2: 執(zhí)行查詢函數(shù)具體參見django1.8.2官方文檔中的查詢集API參考。
最后編輯于2016-01-05,此為模型部分第一次學(xué)習(xí)記錄后續(xù)繼續(xù)完善
轉(zhuǎn)載于:https://www.cnblogs.com/CQ-LQJ/p/5103559.html
總結(jié)
以上是生活随笔為你收集整理的[Django]模型学习记录篇--基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数据结构之查找算法:B+树
- 下一篇: 计算机网络之应用层:3、文件传输协议FT