在开发过程中,需要修改数据库模型类,而且还要在修改之后更新数据库。最直接的方式就是删除旧表,但这样会丢失数据。
更好的解决办法是使用数据库迁移框架,它可以追踪数据库模型的变化,然后把变动应用到数据库中。
在Flask中可以使用Flask-Migrate扩展,来实现数据库迁移。并且集成到Flask-Script中,所有操作通过命令来完成。
安装flask_script包: pip install Flask-Script
安装Flask-Migrate包: pip install flask-migrate
demo.py(数据库迁移,让模型类与数据库产生关联):
#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://root:密码@127.0.0.1:3306/数据库名'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)
# 第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例
Migrate(app, db) # 实例化对象时,会自动将Migrate对象注入到app中,让app和db对象产生关联。
# manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令
manager.add_command('db', MigrateCommand) # 'db'命令名可以任意
# 定义模型类
class Role(db.Model):
pass
if __name__ == '__main__':
manager.run() # 通过管理类对象来运行flask。 需要在命令行中启动web服务。
在命令行中操作:
$ python demo.py db init # 初始化,会创建migrations文件夹,所有迁移文件都放在里面。
$ python demo.py db migrate -m '迁移版本的备注信息' # 在migrations文件夹中生成迁移文件(迁移版本)
$ python demo.py db upgrade # 根据迁移文件更新数据库
$ python demo.py db history # 查看数据库迁移(更新)历史以及迁移版本号
$ python demo.py db downgrade 版本号 # 回退数据库到指定版本号