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數據庫,能夠下載相關可視化工具,查看數據庫中的版本號。