John D
John D

Reputation: 295

how to remove a foreign key constraint using flask and alembic

I am using flask with alembic and i have the two tables below linked by a Foreign key constraint:

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)),

I am trying to get rid of table_one with the alembic revision below

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')
    )

but unfortunately there seem to be an issue with the cascade and i am facing the error below:

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.

Does anyone have an idea how on to solve this issue?

Upvotes: 0

Views: 2050

Answers (1)

Temmyzeus
Temmyzeus

Reputation: 36

Incase anyone is trying to drop a foreign key as the question title says: You can remove a foreign key using the drop_constraint() function in alembic

op.drop_constraint(constraint_name="FK_<target>_<source>", table_name="<source>")

Upvotes: 1

Related Questions