1. 程式人生 > 實用技巧 >《Django Web應用開發實戰》學習筆記 14- Django模型-模型定義、資料遷移

《Django Web應用開發實戰》學習筆記 14- Django模型-模型定義、資料遷移

目錄

學習資料

《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