注意:flask_script与flask2.0不再兼容

一、安装 flask_migrate

pip install flask-migrate==2.5.3

二、示例代码

flask:1.0.2

flask-migrate:2.5.3

from flask import Flask
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate, MigrateCommand

import os

class Config(object):
    ''' sqlalchemy 参数配置 '''
    # 配置数据库
    SQLALCHEMY_DATABASE_URI = 'mysql://test01:123456@127.0.0.1:3306/test01?charset=utf8'
    # 自动会追踪对象的修改并且发送信号
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # 输出sql语句
    SQLALCHEMY_ECHO = True

    SECRET_KEY = os.urandom(24)

app = Flask(__name__)
app.config.from_object(Config)

db = SQLAlchemy(app)

migrate = Migrate(app=app, db=db)

manager = Manager(app)
manager.add_command("db", MigrateCommand)

#定义角色
class Role(db.Model):
    # 定义表名
    __tablename__ = 'roles'
    # 定义列对象
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    email = db.Column(db.String(64), unique=True)
    age = db.Column(db.String(64), unique=True)
    users = db.relationship("User")


#定义用户
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'))


@app.route("/")
def index():
    return "index"

if __name__ == '__main__':
    manager.run()

三、命令操作

实际操作顺序:

1.python 文件 db init       创建迁移仓库

2.python 文件 db migrate -m"版本名(注释)"   创建迁移脚本

3.python 文件 db upgrade 然后观察表结构   更新数据库

4.根据需求修改模型

5.python 文件 db migrate -m"新版本名(注释)"

6.python 文件 db upgrade 然后观察表结构

7.若返回版本,则利用 python 文件 db history查看版本号

8.python 文件 db downgrade(upgrade) 版本号

 

错误:Error: Can’t locate revision identified by 'a1c25fe0fc0e’

解决:python app.py db revision --rev-id  a1c25fe0fc0e