管理資料庫

已完成

Django 的 ORM 不僅僅能夠讓您與資料互動。 您也可以透過稱為「移轉」的流程,使用此 ORM 來建立並更新資料庫本身。

移轉

移轉是一系列要對資料庫結構描述執行的列更新。 資料庫結構描述是資料庫本身的定義,包含所有資料表與資料行,以及這些資料表之間的關聯性。

當我們建立模型並定義欄位時,也同時定義了資料表、資料行,以及這些資料表之間的關聯性。 我們會透過建立模型來建立結構描述定義!

當我們的模型發生變更時,會使用移轉來建立並更新資料庫。 如您所知,軟體可謂日新月異。 我們如今定義模型的方式,與我們在未來定義模型的方式可能有所不同。 移轉讓我們不需要再執行資料庫更新的流程。 我們可以變更模型,並使用 Django 執行必要的變更。

移轉

若要建立移轉,必須使用 manage.py 中的 makemigrations 命令。 makemigrations 命令會從目前的移轉清單入手,再從模型目前的狀態來判斷差異 (需要的變更)。 然後產生必要的程式碼來更新資料庫。 makemigrations 執行之後,會顯示移轉的名稱。

python manage.py makemigrations

顯示移轉所需的 SQL

在關聯式資料庫內發生的所有作業,都需要結構化查詢語言 (SQL)。 Django 的移轉會在執行時產生適當的 SQL。 雖然您可以使用移轉工具直接更新資料庫,但有一些環境可能會有資料庫系統管理員負責管理流程。

若要建置適當的 SQL 陳述式,可以使用 sqlmigrate

python manage.py sqlmigrate <app_label> <migration_name>

注意

app_label 部分是您應用程式的名稱,一般會包含您應用程式的資料夾名稱。 migration_name 部分是移轉的名稱。 您也可以在其 migrations 資料夾中,看到應用程式移轉的 Python 程式碼。

顯示移轉的清單

若要查看所有移轉,可以使用 showmigrations

python manage.py showmigrations

執行移轉

migrate 命令會對專案資料夾根目錄中,settings.py 所設定的資料庫執行特定移轉或所有移轉。

若您開啟 settings.py,將會在底部看到 DATABASES 區段。 此區段包含一個 default 選項,在新的專案上設定為使用 SQLite。 您可以視需要在此區段中,設定不同的資料庫連接字串。

python manage.py migrate <app_label> <migration_name>

注意

app_labelmigration_name 部分為選擇性。 若您未提供其中任何一項,皆會執行所有移轉。 您通常會在開發時使用此命令。