《Django Web應用開發實戰》學習筆記 14- Django模型-模型定義、資料遷移
阿新 • • 發佈:2020-11-26
目錄
學習資料
《Django Web應用開發實戰》
1. 模型與資料庫
Django對各種資料庫提供了很好的支援,包括PostgreSQL、Mysql、SQLite和Orcle,並且為這些資料庫提供了統一的API方法,這些API統稱為ORM框架,通過內建的DjangoORM框架可以實現資料庫連線和讀寫操作。
2. 模型定義與資料遷移
2.1 定義模型
ORM框架是一種程式技術,用於實現面向物件程式語言中不同型別系統的資料之間的轉換,它相當於建立了一個虛擬物件資料庫,我們可以通過虛擬對想庫的操作直接實現對目標資料庫的操作,在Django中統稱為模型。
在index/models.py定義模型
class PersonInfo(models.Model): """個人資訊表""" # AutoField 自增, primary_key=True 定義為主鍵 id = models.AutoField(primary_key=True) # CharField 字元型別, max_length 長度 name = models.CharField(max_length=20) # IntegerField 數字型別 age = models.IntegerField() # DateField 日期型別 hireDate = models.DateField() def __str__(self): return self.name class Meta: verbose_name = '人員資訊'
django Model中常用型別欄位
型別 | 描述 |
---|---|
AutoField | 自增長型別,欄位型別為整數,長度為11 |
CharField | 字元型別 |
BooleanField | 布林型別 |
DateField | 日期型別 |
DateTimeField | 日期時間(Datetime)型別 |
Decimal | 十進位制小數型別 |
EmailField | 字元型別,儲存郵箱格式的字串 |
FloatField | 浮點數型別 |
IntegerField | 整數型別 |
SlugField | 字元型別,包含字母,數字,下劃線和連字元 |
TextField | 長文字型別 |
URLField | 字元型別,儲存路由格式的字串 |
BinaryField | 二進位制資料型別 |
FileField | 字元型別,儲存檔案路徑的字串 |
ImageField | 字元型別,儲存圖片路徑的字串 |
每個模型欄位的引數
引數 | 描述 |
---|---|
verbose_name | 預設為None,在Admin站點管理設定欄位的顯示名稱 |
primary_key | 預設為False,若為True,則將欄位設定為主鍵 |
max_length | 預設為None,設定欄位最大長度 |
unique | 預設為False,若為True,則設定欄位的唯一屬性 |
blank | 預設為False,若為True,則欄位可以為空值,資料庫將儲存空字串 |
null | 預設為False,若為True,則欄位可以為空值,資料庫表現為NULL |
db_index | 預設為False,若為True,則以此欄位建立索引 |
default | 預設為NOT_PROVIDED物件,設定欄位的預設值 |
editable | 預設為True,允許欄位可編輯,用於設定Admin的新增資料的欄位 |
serialize | 預設為True,允許欄位序列化,可將資料轉為json格式 |
choice | 預設為空列表,設定欄位的可選值 |
help_text | 預設為空字串,設定表單的提示資訊 |
db_column | 預設為None,設定資料表的列名稱,預設將欄位名作為表列名 |
db_tablespace | 預設為None, |
auto_created | 預設為False,為True自動建立欄位用於1對1模型中 |
validators | 預設為空列表,設定欄位內容的驗證函式 |
error_message | 預設為None,設定錯誤提示 |
重寫__str__
在定義模型時,一般會重寫
__str_
函式,這是設定模型的返回值,預設情況下返回值為模型名+主鍵,該函式可用於外來鍵查詢,比如模型A設有外來鍵F,外來鍵欄位F與模型B有關聯,當查詢模型A時,外來鍵欄位F會將模型B的函式__str__
返回值作為欄位內容注意:該函式只支援返回str型別,其他型別需要使用str()轉換成字元型別
模型中Meta的屬性
屬性 | 描述 |
---|---|
abstract | 設定為True,抽象模型,不會在資料庫中建表 |
app_label | 屬性值為字串,將模型設定為指定專案應用 |
db_table | 設定資料庫表名,字串型別 |
ordering | 屬性值為列表。將模型以某個欄位排序 |
permissions | 屬性值元組,設定模型的訪問許可權 |
indexs | 屬性值為列表,定義資料表的索引列表 |
verbose_name | 屬性值字串,設定模型直觀可讀的名稱並以複數的形式展示 |
verbose_name_plural | 屬性值字串,設定模型直觀可讀的名稱並以單數的形式展示 |
label | 只讀屬性 |
2.2 資料遷移
# 第一步 生成遷移檔案
python manage.py makemigrations
# 第二步 向資料庫中寫入表
python manage.py migrate
在專案開發過程中如果修改了模型內容,可直接按上述步驟執行命令重新生成資料
資料匯入、匯出
-
匯出:
# 將專案資料表中的資料匯出到data.json檔案 python manage.py dumpdata>data.json
-
匯入:
# 將資料匯入到專案資料表中 python manage.py loaddata data.json