9

オンライン移行を実行するために、MySQL エンジンで alembic を使用しようとしています。onupgrade() メソッドでの操作が失敗すると、データベースが一貫性のない状態でスタックし、onupgrade() での失敗の前に発生した操作を手動でクリーンアップするまで、alembic を使用できないことがわかりました。

例:

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')

したがって、これを実行して op.add_column が失敗した場合、add_column 行を修正しても、「sometable」が存在するため、最初の操作は常に失敗します。アップグレードが完了していないため、alembic がバージョンを更新していないため、ダウングレード スクリプトを実行できません。

ondowngrade() を強制的に実行する方法があれば、役立つかもしれないと考えていました。エラーがいくつかあるはずなので、エラーを無視する必要があります。「secondtable」をドロップするようなものです。とにかくこれを行う方法が見つかりませんでした。

誰でもこれを処理する良い方法がありますか?

4

2 に答える 2

2

移行元のデータベース モデルをバージョン管理している場合は、一時的にそれを使用して移行を作成できます。(バージョン フォルダーを空にするか、すべてを一時ディレクトリに配置する必要がある場合があります) Alembic は、データベースの現在の状態をモデルと比較し、データベースがその状態に到達するための移行コマンドを提供します。この場合、データベースを以前の状態に戻すための指示が表示されます。生成された移行コマンドを調べて、それがまさに必要なものであることを確認する必要がありますが、自分で生成する必要はありません。

その後、移行を削除し、最新のデータベース モデル ファイルにロールバックできます。その後、開始した時点に戻る必要があります

于 2015-10-01T23:06:38.917 に答える