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

时间:2019-12-17 11:24:41

标签: python mysql sqlalchemy alembic

我正在使用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', 'tableb', '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作为引擎。

0 个答案:

没有答案