Flask框架 之Flask-Migrate数据库迁移
注意: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