在 Alembic 降级中删除外键?
Dropping foreign keys in Alembic downgrade?
所以我使用 Alembic 迁移在我的数据库中创建了许多表,每个表都有一个索引和一个或两个外键。
我的升级方法工作正常,执行并创建了表。
我的降级方法失败了,在我删除我的索引然后删除我的表之后。我相信我也必须先删除我的外键?但是我不知道如何从 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')
这三个表中的每一个都有一个外键,那么我该如何先删除它们呢?
蒂亚。
你只需要调用drop constrain。所以在你的升级方法中你可能有以下内容:
op.create_foreign_key(u'my_fkey', 'table1', 'table2', ['table2_id'], ['id'])
然后在你的降级方法中你只需要
op.drop_constraint(u'my_fkey', 'table1', type_='foreignkey')
需要注意的一件事是您在创建外键时分配了一个名称,或者确切知道数据库将使用的命名约定。当您删除约束时,您需要指定所使用的确切名称。
最后一件事可能会帮助您节省时间,那就是使用 alembic 的自动修订功能。我发现这省去了很多繁重的工作,然后我可以根据需要调整脚本。
alembic revision --autogenerate -m <message>
查看 http://alembic.zzzcomputing.com/en/latest/autogenerate.html 了解有关自动生成的更多信息,但它确实可以节省时间。
所以我使用 Alembic 迁移在我的数据库中创建了许多表,每个表都有一个索引和一个或两个外键。
我的升级方法工作正常,执行并创建了表。
我的降级方法失败了,在我删除我的索引然后删除我的表之后。我相信我也必须先删除我的外键?但是我不知道如何从 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')
这三个表中的每一个都有一个外键,那么我该如何先删除它们呢?
蒂亚。
你只需要调用drop constrain。所以在你的升级方法中你可能有以下内容:
op.create_foreign_key(u'my_fkey', 'table1', 'table2', ['table2_id'], ['id'])
然后在你的降级方法中你只需要
op.drop_constraint(u'my_fkey', 'table1', type_='foreignkey')
需要注意的一件事是您在创建外键时分配了一个名称,或者确切知道数据库将使用的命名约定。当您删除约束时,您需要指定所使用的确切名称。
最后一件事可能会帮助您节省时间,那就是使用 alembic 的自动修订功能。我发现这省去了很多繁重的工作,然后我可以根据需要调整脚本。
alembic revision --autogenerate -m <message>
查看 http://alembic.zzzcomputing.com/en/latest/autogenerate.html 了解有关自动生成的更多信息,但它确实可以节省时间。