如何使用flask和alembic删除外键约束



我正在使用flask蒸馏器并且我有下面的两个表由外键约束链接:

table_one = Table("table_one", meta.Base.metadata,
Column("id", BigInteger, primary_key=True),
Column("filename", VARCHAR(65535)),
Column("mission", VARCHAR(65535)),
)

table_two = Table("table_two", meta.Base.metadata,
Column("id", BigInteger, primary_key=True),
Column("file_id", BigInteger, ForeignKey("table_one.id")),
Column("username", ArrowType(timezone=True)),

我正试图摆脱table_one与alembic修订下面

def upgrade():
op.drop_table('table_one')
op.drop_constraint('table_two_id_fkey', 'table_two', type_='foreignkey')
op.drop_column('table_two', 'file_id')
op.drop_column('table_two', 'id')

def downgrade():
op.add_column('table_two', sa.Column('id', sa.BIGINT(), autoincrement=True, nullable=False))
op.add_column('table_two', sa.Column('file_id', sa.BIGINT(), autoincrement=False, nullable=True))
op.create_foreign_key('table_two_file_id_fkey', 'table_two', 'table_one', ['file_id'], ['id'])
op.create_table('table_one',
sa.Column('id', sa.BIGINT(), autoincrement=True, nullable=False),
sa.Column('filename', sa.VARCHAR(length=65535), autoincrement=False, nullable=True),
sa.Column('mission', sa.VARCHAR(length=65535), autoincrement=False, nullable=True),
sa.PrimaryKeyConstraint('id', name='table_one_pkey')
)

,但不幸的是,似乎有一个问题与级联,我面临的错误如下:

psycopg2.errors.DependentObjectsStillExist: cannot drop table table_one because other objects depend on it
DETAIL:  constraint table_two_file_id_fkey on table table_tow depends on table table_one
HINT:  Use DROP ... CASCADE to drop the dependent objects too.

有谁知道如何解决这个问题吗?

如果有人试图放弃外键作为问题标题说:可以使用alembic

中的drop_constraint()函数删除外键
op.drop_constraint(constraint_name="FK_<target>_<source>", table_name="<source>")

最新更新