Rozdział 22 · Tworzenie stron internetowych z Python

Migracje schematów baz danych

Struktura tabeli zmienia się razem z aplikacją — migracja zapisuje tę zmianę przewidywalnie.

Słowo „migracja” migracja schematu - Zmiana struktury bazy danych z czasem. Drugi, czyli przenoszenie danych między bazami danych, jest omówiony w 22.28.

Aplikacja rośnie, a struktura tabeli zaprojektowana na początku przestaje wystarczać. Na przykład zadanie otrzymuje oznaczenie „wykonano”:

Wersja 1Wersja 2
tasks(id, title)tasks(id, title, done)

Migracja schematu — to zapisane zmiany w strukturze, które można zastosować do bazy danych tak samo przewidywalnie na każdym komputerze: u dewelopera lokalnie, u kolegi, na serwerze. W SQL do tego jest komenda ALTER TABLE:

migraciya.sql
ALTER TABLE tasks ADD COLUMN done INTEGER NOT NULL DEFAULT 0;

Stare wiersze nie znikają — każdy wiersz ma nową kolumnę done otrzymuje wartość domyślną, 0.

migraciya.py
import sqlite3

baza = sqlite3.connect("zadachi.db")
baza.execute("ALTER TABLE tasks ADD COLUMN done INTEGER NOT NULL DEFAULT 0")
baza.commit()

Narzędzia, które zapisują migracje za Ciebie

W małym projekcie wystarczy wykonać ALTER TABLE ręcznie raz. W większym projekcie z wieloma programistami i wieloma środowiska migracji są zazwyczaj formatowane z osobnymi plikami z numerami i kolejnością ich użycia – tak aby każda zmiana w strukturze mogła być zastosowana, śledzona i, jeśli zajdzie taka potrzeba, cofnij się. W ekosystemie SQLAlchemy w tym celu, Alembic — osobne narzędzie do migracji schematu, które potrafi porównać aktualną strukturę bazy z opisem w kodzie i wygenerować szkic migracji; taki automatycznie wygenerowany plik — to nie gotowe rozwiązanie, a „szkic migracji” (candidate migration)), który trzeba sprawdzić i w razie potrzeby ręcznie poprawić przed zastosowaniem. W Django migracje są wbudowane w sam framework: polecenie makemigrations tworzy pliki migracji dla wykryte zmiany modelu, oraz migrate stosuje je do baza danych.

migracja schematu dotyczy struktury, a nie treści
migracja schematu odpowiada na pytanie "jak tabela jest teraz ułożona", a nie "co przeniosło się z jednej bazy do drugiej". To zasadniczo inne zadanie niż migracja danych, która zostanie omówiona w Sekcji 22.28 — nie myl tych dwóch znaczeń słowa "migracja", gdy spotykasz je w prawdziwych projektach.
Praktyka: migracja schematu SQLite
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →