Flask-Migrate是一个为Flask应用处理SQLAlchemy数据库迁移的扩展,使得能够经过Flask的命令行接口或者Flask-Scripts对数据库进行操做。html
pip3 install Flask-Migratepython
from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///lrh.db' db = SQLAlchemy(app) migrate = Migrate(app, db) class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128))
上述代码指定数据库为lrh.db,若是不存在将新建;咱们创建了User模型,指定它对应的在数据库中的名字为users,注意此时表尚未在创建。数据库须要指定,此代码也没有新建数据库app.db,若是URI中指定的数据库原先不存在,则没有app.db这个数据库存在。sql
使用flask命令运行上面的代码须要先设置环境变量FLASK_APPshell
export FLASK_APP=test.py #注释:注意等号两边不能有空格数据库
windows: set FLASK_APP=manage.pyflask
flask db initubuntu
这个命令将会新建一个名字为migrations的文件夹,而且记录一个数据库版本号,一份保留在migrations中,一份保存在数据库中(新建一张名字为alembic_version的表来保存),值得注意大是新建了migrations文件夹后须要对数据库模型进行修改,而后使用flask-migrations进行迁移,这样才产生第一个版本号。
windows
flask db migrateapp
迁移脚本最好仔细审查而且按需编写,由于Alembic(flask-migrate的核心)不会检测模型全部大变化,能够参考这个连接,查看Alembic的限制。若是不修改将使用默认策略迁移。工具
升级
flask db upgrade
每次数据库模型变化,须要重复使用migrate命令和upgrade命令(按顺序组合使用),使用成功后将修改版本号。
帮助
使用这个命令查看更多命令。
以前的例子没有额外创建数据库,不便于学习,这里使用flask-script管理数据库创立,此外flask-migrate也支持flask-script的命令行接口,因此能够用flask-script统一管理。
#-*- coding:utf-8 -*- #filename: manage.py from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_script import Manager, Shell from flask_migrate import Migrate, MigrateCommand app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///lrh.db' db = SQLAlchemy(app) migrate = Migrate(app, db) manager = Manager(app) manager.add_command('db', MigrateCommand) class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128)) def make_shell_context(): return dict(app=app, db=db, User=User) manager.add_command("shell", Shell(make_context=make_shell_context)) if __name__ == '__main__': manager.run()
(1)flask-migrate提供了一个ManagerCommand类,能够附加在flask-script的Manager类实例上。
(2)使用add_command()添加一个shell命令,而且将db,app,User加入上下文中。使用shell命令将进入python shell状态,因为将db加入了上下文,可使用shell手动建立数据库,使用python代码:
ubuntu命令行状态下:python3 manage.py shell 进入python shell: >>>db.create_all()
使用flask-script管理数据后,命令以下:
python3 manage.py db init python3 manage.py db migrate python3 mange.py db upgrade python3 mange.py db --help
在你使用上述命令后(创建了数据库),和第一个例子同样,将在数据库和本地保存数据库版本号。本文使用的是sqlite数据库,能够下载相关可视化工具,查看数据库中的版本号。