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.
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
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 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()
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.