私は、オンラインエンジンのマイグレーションを実行するために、alembicをMySQLエンジンとともに使用しようとしています。私のonupgrade()メソッドの操作が失敗したときに、データベースが不整合な状態に陥ってしまい、onupgrade()の失敗前に発生した操作を手動でクリーンアップするまで、私はalembicを使用できないことがわかりました不完全なalembic runのクリーンアップ方法
例:私はこれを実行するとop.add_columnが失敗した場合
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')
だから、私はADD_COLUMNラインを修正しても、今「sometable」最初の操作は必ず失敗しますので存在します。アップグレードが完了していないため、alembicはバージョンを更新していないため、ダウングレードスクリプトを実行できません。
私のondowngrade()を強制的に実行する方法があれば、それは役に立つかもしれないと思っていました。私はエラーを無視しなければならないでしょう。 "secondtable"を落とすように。私はこれを行うにはとにかく見つけることができませんでした。
誰もがこれを処理する良い方法がありますか?
私はalembicがトランザクションでマイグレーションを実行しようとしていると思われますが、エラー時にはロールバックしますが、おそらくあなたのMySQL設定はトランザクションをサポートしていない可能性があります運が良かった。 – moschlar
それは私が恐れていたことですが、MySQLはDDL文のトランザクションをサポートしていません:(http://dev.mysql.com/doc/refman/5.0/en/cannot-roll-back.html) – jjulien