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