ORM回顧
ORM(Object-Relation Mapping),對象-關係映射,對於開發人員主要帶來了如下好處:
- 實現了數據模型與數據庫的解耦,通過簡單的配置就可以輕鬆更換數據庫,而不需要修改代碼。
- 只需要面向對象編程,不需要面向數據庫編寫代碼。
- 在MVT中Model中定義的類,通過ORM與關係型數據庫中的表對應,對象的屬性體現對象間的關係,這種關係也被映射到數據表中。
Django框架中ORM示意圖如下:
模型創建步驟回顧
- 在models.py中定義模型類
- 生成遷移文件
- 執行遷移
定義屬性
語法格式:
屬性 = models.字段類型(選項)
屬性命名限制:
- 不能是python的保留關鍵字
- 不允許使用連續的下劃線
- 定義屬性時需要指定字段類型,通過字段類型的參數指定選項
說明:
- Django會爲表創建自動增長的主鍵列,每個模型類只能有一個主鍵列
- 如果在數據庫中設置了主鍵,Django將不會創建主鍵列
- 默認創建的主鍵列屬性爲id,可以使用pk代替,pk表示primary key。
- pk是主鍵的別名,若主鍵名爲id2,那麼pk是id2的別名。
字段類型
使用時需要引入
django.db.models
包,字段類型如下:
數據類型 | 說明 |
---|---|
AutoField | 自動增長的IntegerField,通常不用指定 不指定時Django會自動創建屬性名爲id的自動增長屬性。 |
BooleanField | 布爾字段,值爲True或False。 |
NullBooleanField | 支持Null、True、False三種值。 |
CharField | 字符串 CharField (max_length=字符長度) max_length 表示最大字符個數 |
TextField | 大文本字段,一般超過4000個字符時使用。 |
IntegerField | 整數 |
DecimalField | 十進制浮點數 DecimalField (max_digits=None, decimal_places=None) max_digits 表示總位數,decimal_places 表示小數位數 |
FloatField | 浮點數 |
DateField | 日期 DateField [auto_now=False, auto_now_add=False]) auto_now 每次保存對象時,自動設置該字段爲當前時間auto_now_add 當對象第一次被創建時自動設置當前時間auto_now_add 和auto_now 互斥,組合將會發生錯誤。 |
TimeField | 時間,參數同DateField |
DateTimeField | 日期時間,參數同DateField |
FileField | 上傳文件字段 |
ImageField | 繼承於FileField,對上傳的內容進行校驗,確保是有效的圖片 |
選項
通過選項設置字段的約束,選項如下:
選項 | 說明 |
---|---|
null | 設置非空約束,默認爲False |
blank | 表示字段允許爲空,默認爲False null是數據庫範疇的概念,blank是表單驗證範疇的 |
db_column | 指定字段的名稱,缺省使用屬性名 |
db_index | 表示爲此字段創建索引,默認爲False |
default | 默認值 |
primary_key | 設置主鍵約束,默認爲False,通常作爲AutoField的選項使用 |
unique | 設置唯一約束,默認爲False |
實例演練
-
在SQLyog中新建數據庫 test2
-
修改models.py中的模型類,編碼如下:
from django.db import models
# 定義圖書模型類BookInfo
class BookInfo(models.Model):
# 指定btitle對應的字段名爲title
btitle = models.CharField(max_length=20, db_column='title')
bpub_date = models.DateField() # 發佈日期
bread = models.IntegerField(default=0) # 閱讀量
bcomment = models.IntegerField(default=0) # 評論量
isDelete = models.BooleanField(default=False) # 邏輯刪除
# 定義人物模型類PersonInfo
class PersonInfo(models.Model):
pname = models.CharField(max_length=20) # 人物姓名
pgender = models.BooleanField(default=True) # 人物性別
isDelete = models.BooleanField(default=False) # 邏輯刪除
# 人物描述,數據庫中的字段可以爲空,但後臺管理頁面的輸入框不能爲空
pcomment = models.CharField(max_length=200, null=True, blank=False)
-
生成遷移文件並執行,查看test2數據庫中的內容