pur*_*aut 8 python sqlalchemy alembic
所以我使用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')
Run Code Online (Sandbox Code Playgroud)
这三个表中的每一个都有一个外键,那么我该如何首先删除它们呢?
TYIA.
Mr-*_*r-F 13
你只需要调用drop约束.因此,在升级方法中,您可能具有以下内容:
op.create_foreign_key(u'my_fkey', 'table1', 'table2', ['table2_id'], ['id'])
Run Code Online (Sandbox Code Playgroud)
然后在你的降级方法中你只需要
op.drop_constraint(u'my_fkey', 'table1', type_='foreignkey')
Run Code Online (Sandbox Code Playgroud)
需要注意的一件事是,在创建外键时指定名称,或者确切地知道数据库将使用的命名约定.删除约束时,需要指定正在使用的名称.
可能有助于节省时间的最后一件事是使用alembic的自动修订功能.我发现这可以节省很多繁重的工作,然后我可以根据需要调整脚本.
alembic revision --autogenerate -m <message>
Run Code Online (Sandbox Code Playgroud)
查看http://alembic.zzzcomputing.com/en/latest/autogenerate.html以获取有关自动生成的更多信息,但它确实节省了时间.
| 归档时间: |
|
| 查看次数: |
5341 次 |
| 最近记录: |