【Flask】Flask-Migrate使用upgrade命令时出现的DROP错误
2017-11-14 17:39
375 查看
问题描述
使用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
相关文章推荐
- 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法
- CentOS 使用yum命令安装出现错误提示”could not retrieve mirrorlist http://mirrorlist.centos.org ***”
- Laravel在Mac下使用php artisan migrate命令出现No such file or directory
- 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法
- 使用apt-get命令时出现404 No Found错误
- Java使用java命令运行程序出现:找不到主类错误
- CentOS 使用yum命令安装出现错误提示”could not retrieve mirrorlist http://mirrorlist.centos.org
- 使用yum命令安装软件时出现HTTP Error 404 NOT FOUND错误的解决办法
- Ubuntu使用sudo命令出现must be setuid root错误的解决方法
- centos使用vim命令出现E325错误解决方法
- ubuntu上运行命令sudo apt-get dist-upgrade,出现错误gzip: stdout: No space left on device
- MAVEN2使用mvn install命令出现java.lang.OutOfMemoryError错误解决办法
- CentOS 使用yum命令安装出现错误提示”could not retrieve mirrorlist http://mirrorlist.centos.org ***”
- MySQL安装过程中,使用net start mysql命令,出现 服务正在启动 服务无法启动 服务没有报告任何错误 的问题
- 在Ubuntu终端中使用安装命令Sudo apt-get install xxx时时出现E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)的错误解决方案
- CentOS 使用yum命令安装出现错误提示”could not retrieve mirrorlist http://mirrorlist.centos.org
- CentOS 使用yum命令安装出现错误提示:Loaded plugins: fastestmirror, refresh-packagekit, security
- zookeeper使用命令zkServer.sh status时出现错误提示问题
- 使用gem命令时出现的几种错误
- CentOS 使用yum命令安装出现错误提示”could not retrieve mirrorlist http://mirrorlist.centos.org ***” - ybq155