Sto provando a utilizzare l'alembic con un motore MySQL per eseguire migrazioni online. Ho scoperto che quando un'operazione nel mio metodo onupgrade() fallisce il mio database si blocca in uno stato incoerente e non posso usare l'alambicco finché non pulisco manualmente tutte le operazioni avvenute prima dell'errore in onupgrade()come pulire il ciclo alambicco incompleto
esempio:
def upgrade():
op.create_table('sometable',
Column('id', INTEGER, primary_key=True),
Column('name', VARCHAR(150), nullable=False, unique=True))
op.add_column('anothertable' Column('id', INTEGER))
op.create_table('secondtable')
quindi, se corro questo e l'op.add_column fallisce, anche se posso correggere la linea add_column, ora "SomeTable" esiste quindi la prima operazione fallirà sempre. Non riesco a eseguire il mio script di downgrade, perché alembic non ha mai aggiornato la versione poiché non ha completato l'aggiornamento.
Stavo pensando se c'era un modo per forzare l'esecuzione del mio ondowngrade(), che potrebbe essere utile. Dovrei ignorare gli errori, perché ce ne saranno sicuramente. Come far cadere "secondtable". Tuttavia non sono riuscito a trovare comunque questo.
Qualcuno ha un buon modo per gestire questo?
Solo un'ipotesi: sospetto che il alembic provi a eseguire le migrazioni in una transazione e ripristini gli errori - ma probabilmente la tua configurazione MySQL non supporta le transazioni, quindi tu Sei sfortunato. – moschlar
Questo è quello che temevo, MySQL non supporta le transazioni per le istruzioni DDL :(http://dev.mysql.com/doc/refman/5.0/en/cannot-roll-back.html – jjulien