Flask-Migrate使用upgrade命令时出现的DROP错误

问题描述

使用migrate初始化数据库后,以后只需要使用“迁移二连”就能满足需求

flask db migrate
flask db upgrade

不过在某次修改表的列之后出现了错误

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) \
near "DROP": syntax error \
[SQL: 'ALTER TABLE comment DROP COLUMN date']

解决方法

由于我使用的SQLite,没有drop的命令,要想修改它的表,只能新建一个表,复制,删除旧表,修改新表名

Migrate封装的Alembic,我不知道Alembic怎么修改的表,但是我查看migrates/versions文件夹中的版本文件的时候,发现了这么几个语句

def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.add_column('comment', sa.Column('body', sa.Text(), nullable=True))
    op.add_column('comment',
                  sa.Column('timestamp', sa.DateTime(), nullable=True))
    op.drop_column('comment', 'date')
    op.drop_column('comment', 'text')
    # ### end Alembic commands ###

这是Migrate自动生成的操作语句

可是Alembic删除列的语句比较特殊,需要把删除列的语句放在with下

with op.batch_alter_table('comment') as batch_op:
    batch_op.drop_column('date')
    batch_op.drop_column('text')

所以,解决方法就是把Migrate自动生成的删除列的语句放在对应表的with下

这时候就可以执行upgrade命令了

如果出现duplicate column name错误,说明删除列语句前面的操作已经执行了,只需要执行downgrade,然后再执行upgrade

重新创建

如果还是解决不了问题,而且数据库的数据量不是很大,那么解决所有问题的方法,就是重新创建数据库

删除migrations文件夹和数据库文件

然后再执行Migrate的创建命令

flask db init
flask db migrate
flask db upgrade

原文链接:https://blog.csdn.net/White_Idiot/article/details/78533046

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值