Alembic 在自动生成期间不断删除和重新创建外键

问题描述 投票:0回答:1

自动生成的初始迁移后,当运行另一个自动生成时,所有外键都将被删除并重新创建。

迁移脚本中的示例代码:

op.drop_constraint('fk_foo_bar_id_bar', 'foo', type_='foreignkey')
op.create_foreign_key(op.f('fk_foo_bar_id_bar'), 'foo', 'bar', ['bar_id'], ['id'], source_schema='public', referent_schema='public')

我尝试更改 env.py include_object 以及迁移的运行方式。我还尝试以任何看起来合理的方式更改 foo 和 bar 模型。 命名 FK 也不起作用。

python database postgresql alembic timescaledb
1个回答
0
投票

解决方案在于删除类中公共模式的显式定义。

如果你的酒吧课上有这个

bar_id: Mapped[Integer] = mapped_column(
        ForeignKey("public.bar.id"), index=True, type_=Integer
    )

在你的 foo 类中

__table_args__ = (
    {"schema": "public"},
)

删除这两项公开声明。 Postgres 有时不会明确地以这种方式命名它,然后 alembic 会认为它是一个不同的 FK 并尝试重新创建它们。

© www.soinside.com 2019 - 2024. All rights reserved.