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