我使用SQLAlchemy的迁移跟踪数据库的变化和我遇到的问题与删除的外键。我有两个表,t_new是一个新表,而t_exists是一个现有的表。我需要添加t_new,然后向t_exists添加一个外键。然后我需要能够扭转操作(这是我遇到麻烦的地方)。如何在SQLAlchemy中删除外键约束?
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 \ exists'(errno:150)“
如果我用原始SQL执行此操作,我可以删除f手动键入关键字然后删除列,但我一直无法弄清楚如何使用SQLAlchemy删除外键?我如何删除外键,然后删除列?
对于任何可能遇到此问题的人 - ForeignKeyConstraint需要从'migrate'中导入,而不是从'sqlalchemy'中导入。 – mjallday