Flask擴充:Flask-Migrate用法
1、介紹
引用官方文檔的話,
Flask-Migrate
是使用
Alembic
遷移Flask應用程式的
SQLAlchemy
資料庫的擴充,可以通過Flask指令行或者
Flask-Script
擴充對資料庫進行操作。
該擴充主要用于遷移資料庫。傳統操作Flask資料庫一般使用
SQLAlchemy
,表的初始化使用
db.create_all
,這種方式建立表之前需要先将原來表删除然後才能生成新的表結構。但是使用
Flask-Migrate
則免去這些繁瑣的步驟。
第一次初始化資料庫分為
建立模型 -> 建立遷移檔案 -> 建立表
三個步驟,分别對應
init
、
migrate
、
upgrade
三個指令。之後表的增删改則隻需要後面兩個步驟。三個步驟執行的詳細内容如下,和
git
操作很相似:
-
: 建立模型,會在同級目錄下增加init
檔案夾,其中的migrations
檔案夾為空;該步驟類似于versions
的倉庫初始化(git
)。init
-
: 根據項目中的資料庫模型建立遷移檔案,該步驟會在migrate
檔案夾中增加内容;類似于versions
的git
和add
操作。commit
-
: 根據建立的遷移檔案更新資料庫;類似于upgrade
的git
操作。push
2、安裝 Flask-Migrate
Flask-Migrate
sudo pip install flask-migrate
沒有安裝
Flask
或者Flask的
Flask-SQLAlchemy
擴充,使用以下指令安裝:
sudo pip install flask
sudo pip install flask-sqlalchemy
3、代碼示例
Flask指令行操作
引用官方的示例代碼:
# 注意:如果資料模型和操作函數不在同一個檔案下,需要引用資料模型,否則不會建立
# 例如你的使用者模型在 models/User.py 中,需要在調用前增加下述類似代碼
# from app.models import User
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
# 資料庫連接配接配置
# 'mysql+pymysql://root:<你的密碼>@<主機位址>/<資料庫名>?charset=utf8'
# 上述為部落客使用的配置,使用的是mysql資料庫,使用前需要安裝pymysql,否則會報錯,安裝指令如下:
# sudo pip install pymysql
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
# 初始化資料庫
db = SQLAlchemy(app)
# 初始化Flask-Migrate擴充
migrate = Migrate(app, db)
# 示例資料庫模型
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
使用下述指令建立模型:
flask db init
接着是建立遷移檔案:
flask db migrate
最後是更新資料庫:
flask db upgrade
通過上面三個步驟,就完成了第一次遷移資料庫操作,使用下述指令檢視使用幫助:
flask db --help
結合 Flask-Script
操作
Flask-Script
安裝
Flask-Script
:
sudo pip install flask-script
示例代碼如下,在上面使用代碼的基礎上增加
Flask-Script
的相關操作即可:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
app = Flask(__name__)
# 注意替換成自己的資料庫連接配接方式
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
if __name__ == '__main__':
manager.run()
然後幾個操作步驟為:
python manage.py db init
python manage.py db migrate
python manage.py db upgrade
python manage.py db --help
4、拓展進階
Flask-Migrate
支援多資料庫,可以和
Flask-SQLAlchemy
的綁定功能結合,進而可以跟蹤與應用程式關聯的多個資料庫的遷移。
建立支援多資料庫的存儲倉庫,需要在
init
後增加
--multidb
參數,示例指令如下:
flask db init --multidb
【參考連結】
- 掘金-flask學習筆記之flask-migrate
- Flask-Migrate官方文檔