2015-07-03 3 views
5

Ich benutze Alembic, um Migrationen für eine Datenbank zu verwalten. Dieselbe Datenbank wird von mehreren Python-Paketen verwendet, und jedes von ihnen hat eigene Migrationspfade.Alembic: Beim automatischen Generieren von Migrationen, wie man Datenbanktabellen durch andere Produkte ignoriert

Wie kann ich Alembic dazu bringen, Tabellen aus anderen Paketen zu ignorieren, wenn automatische Migrationen generiert werden? Zum Beispiel, wenn ich laufe:

alembic -c development.ini revision --autogenerate -m "Initial migration" 

Meine Migration Python-Datei enthält Drop-Tabellen für andere Pakete (nicht im aktuellen Alembic env.py):

def upgrade(): 
    ### commands auto generated by Alembic - please adjust! ### 
    op.drop_table('table_from_another_package`) 

Ich kann manuell Migrationsdatei bearbeiten und entfernen drop_table() und create_table() Einträge, aber das ist manuelle fehleranfällige Arbeit. Ich würde es lieber vermeiden, sie überhaupt zu erzeugen.

+0

Gute Frage, obwohl wahrscheinlich nicht so ein tolles Design mehrere Produkte Zugriff auf die gleiche Datenbank haben. Benutzt du wenigstens verschiedene Schemata? Oder einige Namenskonventionen? Ich glaube nicht, dass dies von Anfang an unterstützt wird, aber wenn ich es zum Laufen bringen müsste, würde ich wahrscheinlich den Code betrachten, der die Datenbank widerspiegelt (entweder "Metadaten" oder "Engine") und eine Möglichkeit finden, sie zu überschreiben so dass es * nein meine Tische * ausfiltert. – van

Antwort

5

Die vollständige Kontrolle darüber, welche Objekte automatisch generiert werden, ist here.

Wenn Sie versuchen, die automatische Generierung so auszuführen, dass sie nur einzelne MetaData-Objekte gleichzeitig berücksichtigt, möchten Sie wahrscheinlich Anpassungen in Ihrer Datei env.py hinzufügen, die die "X" argument nutzt. Verwenden Sie dieses Argument, um zu erhalten, an welcher Unterkomponente Sie arbeiten möchten, und konsultieren Sie diese innerhalb Ihrer include_object-Funktion, um nur die Objekte zu betrachten, die für diese Unterkomponente relevant sind.

Verwandte Themen