1. 程式人生 > >Python Flask,資料庫,SQLAlchemy,資料庫遷移 (根據模型類自動生成資料庫表),Flask-Migrate

Python Flask,資料庫,SQLAlchemy,資料庫遷移 (根據模型類自動生成資料庫表),Flask-Migrate

在開發過程中,需要修改資料庫模型類,而且還要在修改之後更新資料庫。最直接的方式就是刪除舊錶,但這樣會丟失資料。

更好的解決辦法是使用資料庫遷移框架,它可以追蹤資料庫模型的變化,然後把變動應用到資料庫中。

在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 版本號    # 回退資料庫到指定版本號