博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
4.5用flask-migrate实现数据库迁移
阅读量:4094 次
发布时间:2019-05-25

本文共 1259 字,大约阅读时间需要 4 分钟。

一. 安装扩展

二. 修改hello.py 文件

from flask_migrate import  Migrate, MigrateCommand#...migrate = Migrate(app, db)manager.add_command('db', MigrateCommand)  #集成python shell, 见上节,效果如下:

三. 创建迁移仓库

&python hello.py db init   #执行此行命令后, flasky文件夹多处一个migrations文件夹

四.在创建迁移脚本之前我们要先修改一下数据库中的表

class User(db.Model):    __tablename__ = 'users'       id = db.Column(db.Integer, primary_key=True)    username = db.Column(db.String(64), unique=True, index=True)    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))    age = db.Column(db.Integer, unique=True)  #添加一个age列        def __repr__(self):        return '
' %self.username
五. 创建迁移脚本

&python hello.py db migrate  #执行此命令后, migrations文件夹中的versions文件夹中多出一个py迁移脚本, 里面有两个函数upgrade和downgrade

upgrade里面是我们所作的修改, 在users表中增加age列, downgrade里面是删除此次修改, 删除此次修改的代码是错的,因为这是自动生成的迁移脚本, 难免出现错误, 正确代码应该是:

with op.batch_alter_table('users') as batch_op:    batch_op.drop_column('age')
六. 把迁移应用到数据库中

&python hello.py db upgrade

此时我们可以看到, users表中增加了属性列age:

七. 撤销迁移

&python hello.py db downgrade

注意:如果在操作过程中遇到类似错误——sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) duplicate column name: age [SQL: u'ALTER TABLE users ADD COLUMN age INTEGER']

需要修改数据库中的albmic_version中的version_num属性为最近更新过的迁移版本的代号, 也就是迁移脚本的文件名(无后缀), 注意不加下划线。

你可能感兴趣的文章
Java虚拟机工具之堆栈跟踪工具jstack检测对象wait方法
查看>>
Windows下Jconsole无法连接到进程
查看>>
设置tomcat启动参数
查看>>
启动Tomcat提示:指定的服务未安装
查看>>
构建一个n×n的unique矩阵
查看>>
JavaScript代码加Alert后代码有效,不加则无效。
查看>>
Intellj Idea 16添加Maven新建模块
查看>>
Server Tomcat v7.0 was unable to start within 45 seconds
查看>>
动态规划之子集和问题
查看>>
com.sun.mirror的jar包
查看>>
计算在已知字符串中所有回文子序列的数目
查看>>
Java 类的热替换 —— 概念、设计与实现
查看>>
构建Java并发模型框架
查看>>
数据结构——树的概述
查看>>
数据结构——二叉树的特性
查看>>
数据结构——二叉树的类型
查看>>
数据结构——握手引理与有趣的树特性
查看>>
数据结构——树的遍历
查看>>
数据结构——二叉树的直径
查看>>
数据结构——树的水平遍历
查看>>