天天看點

Flask擴充:Flask-Migrate用法Flask擴充:Flask-Migrate用法

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

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

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官方文檔