說說 Python Django 模型的創建流程

模型指的是真實世界對象的明確描述。它包含所需要的數據字段和行爲。Django 遵循 DRY Principle :

  1. 明確優於隱式 - 行爲基於關鍵字參數,並且在某些情況下,基於字段的類型。
  2. 包括所有相關領域邏輯 - 模型應該封裝一個“對象”的各個方面,遵循 Martin Fowler 的 Active Record 設計模式,所有可用於理解該模型的信息都應該存儲在該模型中。

Active Record 設計模式

比如這個 Person 對象,包含數據與行爲,其內部定義了與數據庫的交互行爲。多個 Person 對象會以記錄的形式,存儲在數據庫中。

1 定義模型

假設我們定義好了一個 app,名叫 chart。

之後,我們就可以在 chart/models.py 中,定義一個 Person 模型:

class Person(models.Model):
    first_name=models.CharField(max_length=30)
    last_name=models.CharField(max_length=30)

2 安裝模型

爲了在工程中包含這個 app,我們需要在配置類 INSTALLED_APPS 中添加設置。因爲 app 的配置類(ChartConfig)寫在文件 chart/apps.py 中,所以它的點式路徑就是 ‘chart.apps.ChartConfig’。在文件 chart/settings.py 中 INSTALLED_APPS 子項內添加這個點式路徑:

INSTALLED_APPS = [
    'chart.apps.ChartConfig',
    ...
]

這時在項目路徑下,執行以下命令:

python manage.py makemigrations chart

運行結果:

Migrations for ‘chart’:
chart\migrations\0001_initial.py
- Create model Person

makemigrations 命令的語法爲 python manage.py makemigrations [app],它會比對模型版本,如果需要更新,會把需要更新的部分,存儲在 migrations 目錄中,爲創建或更新模型做好準備:

生成的 0001_initial.py 內容如下:

from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Person',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('first_name', models.CharField(max_length=30)),
                ('last_name', models.CharField(max_length=30)),
            ],
        ),
    ]

這是 Django 用於更新模型的代碼。

manage.py 有一個 sqlmigrate,可用於打印模型遷移時,會執行的 SQL 語句,語法如下:

python manage.py sqlmigrate [app] [migrations 目錄下,某個文件名中的編號]

比如,我們想要查看剛剛建立的遷移內容:

python manage.py sqlmigrate chart 0001

運行結果:

--
-- Create model Person
--
CREATE TABLE `chart_person` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `first_name` varchar(30) NOT NULL, `last_name` varchar(30) NOT NULL);
  1. 運行結果與我們所使用的數據庫有關,上面的示例使用的是 MySQL。
  2. 數據庫的表名是由 app 名(chart)和模型名的小寫形式( people)使用下劃線連接而來,可自定義。
  3. 會自動創建主鍵,可自定義。
  4. 外鍵字段名後會追加字符串 “_id” ,可自定義。

3 創建或更新模型

執行 migrate 指令,創建或更新模型:

python manage.py migrate

運行結果:

Running migrations:
Applying chart.0001_initial… OK

可以看到 MySQL 數據庫中,已經建好了 chart_person 表咯:

Django 通過在數據庫中 django_migrations 表來跟蹤執行這些遷移:

Django 的遷移功能,可以讓我們在開發過程中,改變數據庫結構而不需要重新刪除和創建表,使用它,可以讓數據庫實現平滑升級。


創建或更新模型三部曲:

  1. 在 app 的 models.py 文件,定義模型。
  2. 在 [app]/settings.py 中 INSTALLED_APPS 子項內,註冊 app。(如果已註冊,可跳過該步驟)
  3. 運行 python manage.py makemigrations [app] 把變化的模型生成相應的遷移文件。
  4. 運行 python manage.py migrate 更新數據庫。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章