SQLAlchemy迁移有时无法添加外键约束(高级)

我正在使用Alembic和SQLAlchemy迁移到MySQL数据库。

我正在尝试重命名tablea中的主键,而这恰好是tableb中的外键。由于MySQL不允许我直接重命名该列,因此我必须删除外键约束,重命名该列,然后再添加约束。

升级脚本如下:

from alembic import op
from sqlalchemy.types import String

def upgrade():
    op.drop_constraint('tableb_ibfk_1','tableb',type_='foreignkey')
    op.alter_column('tablea','id',new_column_name='a_id',type_=String(64,collation='utf8mb4_unicode_ci'),nullable=False)
    op.create_foreign_key('tableb_ibfk_1','tablea',['a_id'],['a_id'])

但是,此迁移是不确定的:有时成功,有时失败,并显示以下信息:

sqlalchemy.exc.IntegrityError: (MySQLdb._exceptions.IntegrityError) (1215,'Cannot add foreign key constraint')
[SQL: ALTER TABLE tableb ADD CONSTRAINT tableb_ibfk_1 FOREIGN KEY(a_id) REFERENCES tablea (a_id)]
(Background on this error at: http://sqlalche.me/e/gkpj)

有人能阐明为什么这种迁移有时只能成功吗?两个表都以InnoDB作为引擎。

great_stonezsl321 回答:SQLAlchemy迁移有时无法添加外键约束(高级)

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2906937.html

大家都在问