4.5用flask-migrate实现数据库迁移

一. 安装扩展

二. 修改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 '<User %r>' %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属性为最近更新过的迁移版本的代号, 也就是迁移脚本的文件名(无后缀), 注意不加下划线。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值