flask-migrate出错(MySQLdb._exceptions.OperationalError) (1050, “Table ‘xxxx’ already exists”)

flask数据库(mysql)迁移migrate出现错误

sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1050, “Table ‘xxxx’ already exists”)


问题

修改了模型类中的某一个字段

#更改前name = db.Column(db.String(28), nullable=False)
name = db.Column(db.String(36), nullable=False)

执行python database.py db upgrade的时候,出现sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1050, “Table ‘xxxx’ already exists”)的报错

migrate 总是检测我的操作是重新建立我这个字段所在的表而不是 修改字段。


解决

打开migrations\versions下对应生成的迁移文件,发现自己的修改与migrate生成的迁移命令不同
其实迁移文件中有句话:# ###Alembic自动生成命令,请调整!###
upgrade中的内容和我的修改内容不一致,只能手动修改

这里以改变字段name的长度为例:

删除原来的

	op.create_table('xxxx',
	sa.Column('create_time', sa.DateTime(), nullable=True),
    	sa.Column('update_time', sa.DateTime(), nullable=True),
    	sa.Column('id', sa.Integer(), nullable=False),
    	......
	op.drop_table('xxxx')

添加上

from sqlalchemy.dialects import mysql
op.alter_column('ib_admin', 'name',
                existing_type=mysql.VARCHAR(length=36),
                nullable=False)

即:添加变化的命令


总结

自动创建的迁移脚本会根据模型定义和数据库当前状态的差异,生成upgrade()和downgrade()函数的内容。对比不一定完全正确,有可能会遗漏一些细节,需要进行检查。

发现外键的似乎对比不出来。即模型类的外键部分没有变动,生成迁移文件的时候,还是会生成关于外键变化的迁移内容。

发现迁移文件有误后,其他的更改参考官方文档
migrate迁移文件的更改命令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值