模型學習記錄篇,僅僅自己學習時做的記錄!!!實現模型變更的三個步驟:修改你的模型(在models.py文件中)。運行python manage.py makemigrations ,為這些修改創建遷移文件運行python manage.py migrate ,將這些改變更新到資料庫中。模型欄位類型:...
模型學習記錄篇,僅僅自己學習時做的記錄!!!
實現模型變更的三個步驟:
- 修改你的模型(在models.py文件中)。
- 運行python manage.py makemigrations ,為這些修改創建遷移文件
- 運行python manage.py migrate ,將這些改變更新到資料庫中。
模型欄位類型:
- AutoField自增欄位 一個IntegerField 根據實際ID自動增長.
- BigIntegerField 一個64位整數, 這個欄位預設的表單組件是一個TextInput.
- BinaryField 一個用來存儲原始二進位碼的Field.
- BooleanField
- CharField class CharField(max_length=None[, **options]), 存儲從小到很大各種長度的字元串的地方, 預設的表單樣式是 TextInput.
- CommaSeparatedIntegerField 一個逗號分隔的整數欄位。
- DateField 一個使用Python的datetime.date實例表示的日期.
- DateTimeField 通過Pythondatetime.datetime實例表示的日期和時間.
- DecimalField 十進位浮點數,表示python中 Decimal 的一個實例.
- DurationField 用作存儲一段時間的欄位類型 - When used on PostgreSQL, the data type used is an interval
- EmailField that the value is a valid email address
- FileField 一個上傳文件的欄位
- FilePathField 一個 CharField ,內容只限於文件系統內特定目錄下的文件名。
- FloatField 通過一個浮動實例表示Python中的浮點數。
- ImageField
- IntegerField 一個整數。從 -2147483648 到 2147483647 範圍內的值是合法的。預設的表單輸入工具是TextInput.
- IPAddressField
- GenericIPAddressField
- NullBooleanField
- PositiveIntegerField 跟IntegerField一樣,但必須是大於等於0,從0到147483647 範圍內的值是合法的。
- PositiveSmallIntegerField 跟PositiveIntegerField一樣,但只只允許在0到32767範圍內
- SlugField
- SmallIntegerField 跟IntegerField一樣,範圍從-32768到32767範圍內是合法的
- TextField 大的文本欄位,預設表單是Textarea.
- TimeField 時間欄位,類似於DateField和DateTimeField
- URLField
- UUIDField
模型執行查詢
註:模型執行查詢語句寫在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,此為模型部分第一次學習記錄後續繼續完善