Я использую SQLAlchemy Migrate для отслеживания изменений в базе данных и столкнулся с проблемой удаления внешнего ключа. У меня есть две таблицы, t_new - это новая таблица, а t_exists - это существующая таблица. Мне нужно добавить t_new, затем добавить внешний ключ для t_exists. Тогда я должен иметь возможность отменить операцию (вот где у меня проблемы).
t_new = sa.Table("new", meta.metadata,
sa.Column("new_id", sa.types.Integer, primary_key=True)
)
t_exists = sa.Table("exists", meta.metadata,
sa.Column("exists_id", sa.types.Integer, primary_key=True),
sa.Column(
"new_id",
sa.types.Integer,
sa.ForeignKey("new.new_id", onupdate="CASCADE", ondelete="CASCADE"),
nullable=False
)
)
Это отлично работает:
t_new.create()
t_exists.c.new_id.create()
Но это не так:
t_exists.c.new_id.drop()
t_new.drop()
Попытка удалить столбец внешнего ключа выдает ошибку: 1025, «Ошибка при переименовании». \ My_db_name \ # sql-1b0_2e6 «в». \ My_db_name \ exist '(номер ошибки: 150) »
Если я сделаю это с необработанным SQL, я могу удалить внешний ключ вручную, а затем удалить столбец, но я не смог выяснить, как удалить внешний ключ с помощью SQLAlchemy? Как я могу удалить внешний ключ, а затем столбец?