Migrate 简介
Migrate 类似于 Django 中的 manager.py 的 migrate,它的作用是将我们写好的 ORM 类对象,迁移到数据库中
数据库迁移操作顺序
-
python 文件 db init
-
根据需求修改模型
-
python flaskapp文件 db migrate -m"新版本名(注释)"
-
python flaskapp文件 db upgrade 然后观察表结构
-
若返回版本,则利用 python 文件 db history查看版本号
-
python 文件 db downgrade(upgrade) 版本号
编写 ORM 对象
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
from flask import Flask
from flask_sqlalchemy import sqlAlchemy
from flask_migrate import Migrate,MigrateCommand
from flask_script import Manager
app = Flask(__name__)
manager = Manager(app)
app.config['sqlALCHEMY_DATABASE_URI'] = 'MysqL+MysqLdb://root:makemoney@127.0.0.1:3306/flask_demo'
app.config['sqlALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['sqlALCHEMY_TRACK_MODIFICATIONS'] = True
db = sqlAlchemy(app)
# 第一个参数是Flask的实例,第二个参数是sqlalchemy数据库实例
migrate = Migrate(app,db)
# manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令
manager.add_command('db',MigrateCommand)
# 定义模型Role
class Role(db.Model):
# 定义表名
__tablename__ = 'roles'
# 定义列对象
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(64),unique=True)
user = db.relationship('User',backref='role')
# repr()方法显示一个可读字符串,
def __repr__(self):
return 'Role:'.format(self.name)
# 定义用户
class User(db.Model):
__talbe__ = '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'))
def __repr__(self):
return 'User:'.format(self.username)
if __name__ == '__main__':
manager.run()
创建迁移仓库
python manager.py db init
创建迁移脚本
自动创建迁移脚本有两个函数
upgrade() :函数把迁移中的改动应用到数据库中
downgrade() :函数则将改动删除
自动创建的迁移脚本会根据模型定义和数据库当前状态的差异,生成 upgrade() 和 downgrade() 函数的内容
对比不一定完全正确,有可能会遗漏一些细节,需要进行检查
python manager.py db migrate
更新数据库
python manager.py db upgrade
返回以前的版本
可以根据 history 命令找到版本号,然后传给downgrade命令:
python app.py db history
输出格式:<base> -> 版本号 (head),initial migration
回滚到指定版本
python app.py db downgrade 版本号
参考文章:https://www.cnblogs.com/sablier/p/11084080.html#283342143 (编辑:北几岛)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|