我正在使用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
作为它们的引擎。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐