注意: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