Alembic migrieren mit vorhandener SQLAlchemy-Engine

9

Ich habe eine bestimmte SQLAlchemy-deklarative Basis, die ich in einer SQLite-Speicher-DB erzeuge:

%Vor%

Ich benutze dies für Unit-Test-Logik.

Damit habe ich meine Tabellen in der DB. Aber jetzt möchte ich bestimmte Dinge mit Alembic migrieren.

AFAIK-Alembic-Migrationen verwenden die env.py run_migrations_online und verwenden dort eine SQLAlchemy-Funktion namens engine_from_config , die hier eine neue Engine erstellt.

Das Problem, das ich lösen möchte, besteht darin, eine Möglichkeit zu haben, die zuvor erstellte Verbindung, die die kürzlich erstellten Tabellen enthält, für die Alembic-Migrationen zu verwenden.

Ich habe dies in meinen Testskripten verwendet: Alembic-API aus dem Anwendungscode heraus verwenden , damit mein Skript nach dem vorherigen create_all -Aufruf Folgendes ausführt:

%Vor%

[Bitte beachten Sie, ich würde nur meine Schemata mit dem Base.metadata.create_all(engine) -Aufruf erstellen, aber meine Alembic-Versionen enthalten nicht nur Schemaänderungen, sie haben auch einige Daten in den Katalogtabellen, deshalb beabsichtige ich hier den Alambic zu verwenden. In der Tat, wenn meine Alembic Migrationen einige "Tabellen erstellen" -Logik enthalten, würden diese beiden Konflikte. Also kann ich den create_all -Aufruf sicher entfernen und bin nur auf Alambic angewiesen, um meine Schemas hier zu erstellen.]

Nachdem ich den% s% alambic env.py geändert habe:

%Vor%

Soweit ich das beurteilen kann, erstellt die connectable=engine_from_config eine Verbindung zu einer neuen Engine in einer neuen sqlite:///:memory: -Datenbank, und deshalb kann ich die zuvor erstellte DB in meinem Skript mit create_all(engine) nicht über einen Alambic upgraden.

Also ... TLDR; Gibt es eine Möglichkeit, meine bereits bestehende Engine-Verbindung (mit meinen erstellten Tabellen) an Alembic zu übergeben, damit sie es migrieren kann? (Ich bin mir ziemlich sicher, dass das von mir erstellte dbPath-Argument hier nutzlos ist, ich kopiere nur, was der andere Post, auf den ich verwiesen habe, verwendet).

    
Javier Novoa C. 19.01.2018, 21:54
quelle

1 Antwort

2

Sie können eine Alembic-Konfigurationsinstanz erstellen und Operationen darauf ausführen:

%Vor%

Es könnte eine Feinabstimmung erfordern, aber das ist der allgemeine Kern der Dinge.

    
Hetzroni 29.01.2018, 12:35
quelle