[PYTHON] Einführungsnotiz zu Alembic (DB Schema Management Tool)

Ich möchte nicht erschöpft sein, wenn ich die Upgrade- und Downgrade-Skripte für die Migration handschriftlich schreibe. Deshalb habe ich Alembic eingeführt.

Alembic ist ein nützliches Tool, das automatisch Unterschiede zwischen Upgrade und Downgrade des SQL Alchemy-Migrationsskripts und des Serverstatus generiert.

Installation

Die Installation endet mit pip

pip install sqlalchemy
pip install alembic

Es ist erforderlich, den SQL-Treiber für Python entsprechend dem von Ihnen verwendeten SQL zu installieren (Sie müssen in der Lage sein, eine Verbindung zum SQL Server herzustellen, um einen Unterschied zum Server zu machen).

Diesmal habe ich es in MySQL verwendet.

pip install pymysql

Grundeinstellung

Erstellen Sie ein Arbeitsverzeichnis mit dem Befehl alembic init.

alembic init [Name des Arbeitsverzeichnisses]

Die Datei alembic.ini und das angegebene Arbeitsverzeichnis werden erstellt. Im Arbeitsverzeichnis befindet sich eine Einstellungsdatei mit dem Namen env.py. Bearbeiten Sie diese Datei und zwei Dateien, alembic.ini.

Zunächst beschreibt alembic.ini die Einstellungen für die Verbindung zu MySQL. Schreiben Sie sqlalchemy.url neu.

sqlalchemy.url = mysql+pymysql://Nutzername:Passwort@Hostname:Hafen/DB-Name
※:Der Portname ist optional

Sie müssen bis zum DB-Namen angeben. Da Sie mehrere INI-Dateien vorbereiten und zur Laufzeit ordnungsgemäß verwenden können, können Sie damit umgehen, indem Sie für jede Datenbank eine INI-Datei vorbereiten.

Schreiben Sie dann env.py in Ihr Arbeitsverzeichnis. Da hier eine Kommentarzeile # zum Hinzufügen des MetaData-Objekts Ihres Modells vorhanden ist, registrieren Sie eine Instanz der MetaData-Klasse des DB-Definitionsskripts für SQL Alchemy für die Variable target_metadata darunter.

Es kann etwas verwirrend sein, daher zunächst das DB-Definitionsskript für die Beispiel-SQLAlchemy

sample.py


from sqlalchemy import MetaData, Table, Column, Integer, String, DateTime, Float, Boolean, Text
from sqlalchemy.dialects.mysql import TINYINT, SMALLINT

meta = MetaData()

Table(
  'status', meta,
  Column('account_id', Integer, primary_key=True, autoincrement=False),
  Column('hp', SMALLINT, nullable=False, server_default='30'),
  Column('weapon_id', SMALLINT, nullable=False, server_default='1'),
  Column('weapon_lv', TINYINT, nullable=False, server_default='0'),
  Column('armor_id', SMALLINT, nullable=False, server_default='1'),
  Column('armor_lv', TINYINT, nullable=False, server_default='0'),
)

Wenn ja,

env.py


# add your model's MetaData object here
# for 'autogenerate' support
# from myapp import mymodel
# target_metadata = mymodel.Base.metadata
import sample
target_metadata = sample.meta

Schreiben Sie so.

Generierung von Migrationsskripten

Um die Datei sample.py zu importieren, müssen Sie den Speicherort der Datei in PYTHONPATH angeben. Auch wenn es aktuell ist, müssen Sie angeben.

PYTHONPATH=. alembic revision --autogenerate

Wenn Sie mehrere alembic.ini vorbereiten, geben Sie diese mit der Option --config an, nachdem Sie den Dateinamen geändert haben.

PYTHONPATH=. alembic --config ini file revision--autogenerate

Durch Hinzufügen von --autogenerate wird der Unterschied zwischen dem aktuellen Server und dem angegebenen SQLAlchemy-Skript in dem Verzeichnis namens Versionen im Arbeitsverzeichnis erfasst und das Skript einschließlich Upgrade und Downgrade wird automatisch generiert.

Bearbeiten Sie anschließend die Datei, die die in der INI-Datei angegebene Migrationsquelle darstellt, und generieren Sie mit dem Befehl alembic revision eine Differenzdatei. Selbst wenn Sie einen Fehler machen und ein seltsames Einstellungsskript erstellen, können Sie dies nicht nur tun, indem Sie die generierte Datei löschen, wenn Sie sie gerade erstellt haben.

Gilt für den Server

Mit der Alembic-Revision erstellte Skripte können mithilfe des Alembic-Upgrades auf den Server angewendet werden. Sie können auf eine beliebige Version aktualisieren oder ein Downgrade durchführen. Meistens werden Sie jedoch mit der neuesten Version aktualisieren. Geben Sie head an, um auf die neueste Version zu aktualisieren.

PYTHONPATH=. alembic --Konfigurations-INI-Datei-Upgrade-Kopf

Beheben Sie, wenn die Version falsch ist

alembic ist eine einfache Versionsverwaltung, die eine Tabelle mit dem Namen alembic_version in der Datenbank erstellt und den Dateinamen (mit Ausnahme des letzten _) in version_num speichert.

Wenn Sie also den neuesten Dateinamen in den Versionen auf version_num setzen, nachdem Sie die Datenbank auf die neueste Version angepasst haben, tritt keine Versionsabweichung auf.

Wenn Sie das Skript in Versionen unter dem Arbeitsverzeichnis und der Tabelle alembic_version in der Datenbank löschen, können Sie davon ausgehen, dass keine Einstellung von alembic vorhanden ist.

Recommended Posts

Einführungsnotiz zu Alembic (DB Schema Management Tool)
Tensorflow-GPU Einführungsnotiz
H2O.ai Einführungsnotiz
Gedichteinführungsnotiz (ubuntu18.04)
PyTorch-Memo (Dimensionsverwaltung)