Django 模型遷移與資料庫同步完整指南

更新日期: 2024 年 11 月 24 日

在 Django 開發中,模型(Model)是定義數據結構的核心部分,而遷移(Migration)則負責將這些結構同步到資料庫中。

然而,遷移並非直接建立資料庫,而是生成一系列描述模型變更的檔案,透過這些檔案進行同步操作。

本篇文章將詳細介紹 Django 模型與資料庫同步的完整流程,並解答常見的誤解與疑問。


模型到資料庫的完整流程

Django 的模型與資料庫同步過程可以分為以下三步:

  1. 模型(Model)
    在應用的 models.py 文件中定義數據結構,例如資料表的欄位、類型與屬性。
  2. 遷移(Migration)
    Django 會檢查所有應用中的模型,判斷是否有新增、修改或刪除,並根據變更生成遷移檔案,作為資料庫操作的指令描述。
  3. 資料庫(Database)
    遷移檔案被應用到資料庫後,資料表會根據描述檔案創建或更新。

常見誤解

  • 遷移 ≠ 資料庫建立
    遷移(Migration)並不是直接建立資料庫,而是生成描述檔案,用於告訴資料庫應該如何更新結構。
    • 資料庫的建立 是透過資料庫系統本身進行的(如 SQLite、PostgreSQL)。
    • 遷移檔案 是操作資料庫的中介,幫助將模型與資料表同步。

流程示意圖

Model ----[makemigrations]----> Migration 描述檔 ----[migrate]----> 資料庫

生成遷移檔案與檔案位置

使用 makemigrations 指令

每次對模型進行修改後,我們需要執行以下指令,生成描述模型變更的遷移檔案:

python manage.py makemigrations

遷移檔案的位置

Django 會在應用的 migrations/ 資料夾中生成新的遷移檔案。

以下是完整的目錄結構:

mysite/
├── manage.py
├── mysite/
   ├── __init__.py
   ├── settings.py
   ├── urls.py

├── resumes/
   ├── __init__.py
   ├── admin.py
   ├── apps.py
   ├── models.py         # 定義模型
   ├── migrations/       # 存放遷移檔案
      ├── __init__.py
      ├── 0001_initial.py  # 初始遷移檔案

├── db.sqlite3            # 預設的 SQLite 資料庫

遷移檔案的作用

  • 記錄模型變更:每個遷移檔案都記錄模型的新增、修改或刪除,這些記錄會被用於生成對應的 SQL 語法。
  • 自動生成 SQL 語法:遷移檔案幫助開發者省略手動書寫 SQL 的繁瑣過程,Django 會根據描述自動生成並執行正確的 SQL 語法。

遷移檔案的詳細作用

檢查與生成描述檔

當執行 makemigrations 時,Django 會掃描專案中所有應用的模型:

  1. 比較目前的模型定義與上一次遷移檔案的狀態。
  2. 判斷模型是否有新增、刪除或修改。
  3. 針對變更生成對應的遷移檔案。

例如:

  • 新增模型會生成 CreateModel 的操作。
  • 修改欄位會生成 AlterField 的操作。

遷移檔案範例

以下是遷移檔案 0001_initial.py 的內容:

class Migration(migrations.Migration):

    initial = True

    dependencies = []

    operations = [
        migrations.CreateModel(
            name='Resume',
            fields=[
                ('id', models.BigAutoField(primary_key=True)),  # 自動生成的 ID
                ('title', models.CharField(max_length=50)),
                ('skill', models.CharField(max_length=50, null=True)),
                ('content', models.TextField(null=True)),
            ],
        ),
    ]

遷移檔案的每次變更都會被納入版本控制(如 Git),方便團隊成員同步資料庫結構,並保證版本一致性。


應用遷移到資料庫

在生成遷移檔案後,我們需要使用以下指令,將描述檔案應用到資料庫:

python manage.py migrate

指令的作用

  • Django 會根據遷移檔案生成 SQL 語法,並執行這些指令來創建或更新資料表。
  • 每個遷移都會記錄到一張名為 django_migrations 的表中,用於追蹤哪些遷移已經執行。

資料庫檢視與工具

遷移完成後,Django 的預設資料庫 db.sqlite3 會被更新,並包含所有的資料表與結構。

如何檢視資料庫?

SQLite 是 Django 的預設資料庫,需使用專門的工具進行檢視,例如:

  1. SQLite Viewer:瀏覽器插件或線上工具。
  2. DB Browser for SQLite:桌面應用程序,用於操作 SQLite 資料庫。

為什麼 db.sqlite3 無法直接在 VS Code 中打開?

SQLite 文件是二進制格式,無法用普通文本編輯器查看。

雖然 VS Code 支援多種插件(如 SQLite 插件),但需要安裝相應擴展才能檢視和操作。


遷移的版本控制與常見指令

Django 支援遷移的版本控制,方便回退到特定的結構或檢視遷移狀態。

常見指令

  1. 顯示遷移狀態 python manage.py showmigrations 此指令會列出所有應用的遷移檔案,以及它們的執行情況。
  2. 回退到特定版本 若需回退到某個遷移版本,可執行以下指令:
python manage.py migrate <app_name> <migration_name>

例如:

python manage.py migrate resumes 0001_initial
  1. 清空遷移記錄(僅限開發環境) 若需重新生成遷移檔案,可刪除 migrations/ 資料夾,並執行以下指令:
 python manage.py makemigrations python manage.py migrate

小結

Django 的遷移工具幫助開發者高效管理資料庫結構,其特點包括:

  1. 模型與資料庫同步:透過 makemigrationsmigrate,自動將模型變更應用到資料庫。
  2. 自動生成 SQL 語法:減少手動操作,提高開發效率。
  3. 版本控制:每次變更都有記錄,方便團隊協作與追蹤。

工作流程

  1. 修改或新增模型。
  2. 執行 python manage.py makemigrations 生成描述檔。
  3. 執行 python manage.py migrate 將描述檔應用到資料庫。
  4. 使用工具檢視資料庫結構與內容。

Django 的遷移系統不僅提高了開發效率,還大大降低了管理資料庫結構的複雜度,是 Web 開發中的一項重要工具。

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *