自动生成的初始迁移后,当运行另一个自动生成时,所有外键都将被删除并重新创建。
迁移脚本中的示例代码:
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 也不起作用。
解决方案在于删除类中公共模式的显式定义。
如果你的酒吧课上有这个
bar_id: Mapped[Integer] = mapped_column(
ForeignKey("public.bar.id"), index=True, type_=Integer
)
在你的 foo 类中
__table_args__ = (
{"schema": "public"},
)
删除这两项公开声明。 Postgres 有时不会明确地以这种方式命名它,然后 alembic 会认为它是一个不同的 FK 并尝试重新创建它们。