2015-07-03 11 views
5

Sto utilizzando Alembic per gestire le migrazioni per un database. Lo stesso database viene utilizzato da più pacchetti Python e ognuno di essi ha i propri percorsi di migrazione.Alambicco: durante la generazione automatica delle migrazioni come ignorare le tabelle del database da altri prodotti

Come posso dire ad Alembic di ignorare le tabelle di altri pacchetti durante la generazione di migrazioni automatiche? Per esempio, quando ho eseguito:

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

mio file di migrazione Python contiene tabelle goccia per altri pacchetti (non nella corrente env.py Alambicco):

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

posso modificare manualmente file di migrazione e rimuovere drop_table() e create_table() voci, ma questo è un lavoro soggetto a errori manuale. Preferisco evitare di generarli in primo luogo.

+0

Buona domanda, anche se probabilmente non è un progetto così eccezionale per avere più prodotti che accedono allo stesso database. Almeno usi schemi diversi? O alcune convenzioni sui nomi? Non penso che questo sia supportato immediatamente, ma se dovessi farlo funzionare, probabilmente guarderei il codice che sta riflettendo il database ("Metadata" o "Engine") e trovo un modo per sovrascriverlo in modo che filtra * no i miei tavoli *. – van

risposta

5

Controllo completo su ciò che gli oggetti considerati dall'autogenerazione è here.

Se si sta tentando di eseguire la generazione automatica in modo che consideri solo singoli oggetti MetaData alla volta, è consigliabile aggiungere la personalizzazione nel file env.py che sfrutta lo "X" argument. Utilizzare questo argomento per ricevere il sottocomponente su cui si desidera lavorare e consultarlo all'interno della funzione include_object per esaminare solo gli oggetti rilevanti per quel sottocomponente.

Problemi correlati