web-dev-qa-db-ja.com

Alembicのダウングレードで外部キーを削除しますか?

そのため、Alembic移行を使用してデータベースにいくつかのテーブルを作成しました。各テーブルには、インデックスと1つまたは2つの外部キーがあります。

私のアップグレード方法は正常に機能し、実行してテーブルを作成します。

インデックスを削除してからテーブルを削除した後、ダウングレードメソッドが失敗します。私も最初に外部キーをドロップする必要があると思いますか?ただし、Alembicドキュメントから外部キーを削除する方法がわかりません。

ダウングレード方法:

def downgrade():
    # Drop Indexes
    op.drop_index('ix_charge_id')
    op.drop_index('ix_statutory_provision_id')
    op.drop_index('ix_originating_authority_id')

    # Drop Tables
    op.drop_table('charge')
    op.drop_table('statutory_provision')
    op.drop_table('originating_authority')

これらの3つのテーブルにはそれぞれ外部キーがありますが、最初にこれらを削除するにはどうすればよいですか?

TYIA。

10

ドロップコンストレイントを呼び出す必要があります。したがって、アップグレード方法には次のようなものがあります。

op.create_foreign_key(u'my_fkey', 'table1', 'table2', ['table2_id'], ['id'])

次に、ダウングレード方法で必要なのは

op.drop_constraint(u'my_fkey', 'table1', type_='foreignkey')

注意すべき点の1つは、外部キーを作成するときに名前を割り当てること、またはデータベースで使用される命名規則を正確に知っていることです。制約を削除するときは、使用されている正確な名前を指定する必要があります。

あなたの時間を助けそして節約するかもしれないもう一つのことは、alembicの自動修正機能を使うことです。これにより、手間のかかる作業を大幅に節約できることがわかりました。必要に応じて、スクリプトを微調整するだけで済みます。

alembic revision --autogenerate -m <message>

自動生成の詳細については、 http://alembic.zzzcomputing.com/en/latest/autogenerate.html を確認してください。ただし、実際には時間の節約になります。

17
Mr-F