Rozdział 22 · Tworzenie stron internetowych z Python

Transfer danych między bazami danych

Nie chodzi o strukturę tabeli, lecz o same rekordy — jak są one przekazywane między bazami danych i dlaczego transfer jest koniecznie sprawdzany.

Drugie znaczenie słowa «migracja» — migracja danych między bazami lub systemami: na przykład, ze starej bazy do nowej, z jednego formatu przechowywania do drugiego. Nie mieszaj z migracją schematu z rozdziału 22.27 — tam zmieniano strukturę tabeli, tutaj przenoszone są same rekordy.

Baza źródłowa
czytamy wiersze
Python
przekształcać dane
JSON
plik pośredni (opcjonalny) 15
Baza Docelowa
pisać linie
Weryfikacja
sprawdzamy ilość i zawartość
Przenoszenie danych: odczyt, przekształcenie, zapis, sprawdzenie

JSON (rozdział 22.15) jest wygodny jako średniozaawansowany format w tym procesie jest taki, że on tekstowy, czytelny dla człowieka i łatwy do odczytania w każdym języku programowania. Ale JSON — nie uniwersalny format bezstratnej łącznicy: nie ma osobnego typu dla dat, dla dane binarne, a także nie przechowuje ograniczeń i relacji między tabelami (klucze obce, Rozdział 22.21) – muszą być przywracane osobno po stronie docelowej bazy.

Mały powtarzalny przykład

eksport_v_json.py
import json
import sqlite3

istochnik = sqlite3.connect("zadachi.db")
istochnik.row_factory = sqlite3.Row

stroki = istochnik.execute("SELECT title, done FROM tasks").fetchall()
dannye = [dict(stroka) for stroka in stroki]

with open("zadachi.json", "w", encoding="utf-8") as fajl:
    json.dump(dannye, fajl, ensure_ascii=False, indent=2)
import_iz_json.py
import json
import sqlite3

with open("zadachi.json", encoding="utf-8") as fajl:
    dannye = json.load(fajl)

cel = sqlite3.connect("novaya_zadachi.db")
cel.execute("CREATE TABLE tasks (id INTEGER PRIMARY KEY, title TEXT NOT NULL, done INTEGER NOT NULL DEFAULT 0)")
for zapis in dannye:
    cel.execute(
        "INSERT INTO tasks (title, done) VALUES (?, ?)",
        (zapis["title"], zapis["done"]),
    )
cel.commit()
Identyfikatory to rozwiązanie, które wymaga wyraźnego przemyślenia i zweryfikowania
W powyższym przykładzie nowa baza sama przypisuje nowe wartości id po wstawieniu stare ID nie są migrowane. To świadomy wybór, a nie przypadek: jeśli ważne jest, aby aplikacja zachowała oryginał id (na przykład są odwoływane zewnętrznie), muszą być migrowane jawnie, a następnie weryfikowane, że pozostają unikalne. Każda migracja danych musi zakończyć się sprawdzeniem, czy liczba wierszy się zgadza oraz czy reprezentatywne rekordy w źródle i docelowym się zgadzają.

Transfer między plikami lokalnymi SQLite w tym przykładzie odtwarza tę samą zasadę, i przenieść się do przemysłowej bazy takiej jak PostgreSQL — czytać, transformować, pisać, Sprawdzone. Różnią się tylko konkretne narzędzia i sterowniki połączenia; po pierwsze — Obowiązkowa kopia kopii zapasowej danych źródłowych.

Praktyka: Migracja danych przez JSON
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →