Führt alembic upgrade head
innerhalb einer Transaktion, so dass alle Datenbankänderungen erfolgreich sind oder fehlschlagen? Wenn nicht, warum wurde es so entworfen?Ausführen von Alembic-Upgrade-Migrationen in einer Transaktion
5
A
Antwort
1
Mein Verständnis ist, alembic läuft innerhalb einer Transaktion für Datenbanken, die es, wie Postgres unterstützen. Wenn Sie auf einer Datenbank sind, die nicht unterstützt dies (Husten MySQL Husten), können Sie diese Funktion nicht nutzen können.
1
, dass etwas Sie im env.py
entscheiden können, was ist, wo Sie das Verhalten der Migrationen anpassen Ihr Setup anpassen. Sie können sehen, wie Ihre Upgrades in einer Transaktion aus der Vorlage geschehen, um sicherzustellen, als Beispiel für generische Datenbanken zur Verfügung gestellt: https://github.com/zzzeek/alembic/blob/eaaafbca88f85f5432e04affe1f94cbf1ad06080/alembic/templates/generic/env.py#L64
def run_migrations_online():
...
with context.begin_transaction():
context.run_migrations()
Warum wird es nicht in der Transaktion in MySQL –
MySQL DDL-Befehlen wie 'ALTE/run CREATE/DROP TABLE' automatisch alle laufenden Transaktionen, so ist es in der Regel "sicherer" (zumindest vorhersehbarer) Transaktionen überhaupt nicht zu verwenden. Mit anderen Worten, Schemaänderungen sind in Transaktionen nicht enthalten. –