1. 程式人生 > >Flask擴充套件之 【Flask-Migrate】資料庫的遷移

Flask擴充套件之 【Flask-Migrate】資料庫的遷移

資料庫遷移:

  • 在開發過程中,需要修改資料庫模型,而且還要在修改之後更新資料庫。最直接的方式就是刪除舊錶,但這樣會丟失資料。
  • 更好的解決辦法是使用資料庫遷移框架,它可以追蹤資料庫模式的變化,然後把變動應用到資料庫中。
1.安裝: 擴充套件的萬年不變法則 當然,第一步還是需要在安裝了flask框架的虛擬環境中,安裝擴充套件:
pip install flask-migrate

2.匯入擴充套件中的包:

咱們這裡就是Migrate 和 MigrateCommand 用的多,所以就先匯入這兩個,不夠再導唄。

from flask_migrate import migrate,MigrateCommand

3.使用遷移類將應用(app)和資料庫物件(db)儲存起來:

Migrate(app, db)

4.建立終端命令的物件:

由於資料庫的遷移,是需要在終端上進行命令操作的,所以,在這裡,我們還需要利用flask-script擴充套件的相關使用: Flask-script–通過命令列執行檔案的外掛

from flask.ext.script import Manager

manager = Manager(app)

5.將資料庫的遷移命令新增到manager中 MigrateCommand是遷移的命令,manager是Flask-Script的例項,這條語句在flask-Script中新增一個db命令

manager.add_command('db', MigrateCommand)

注意: 這裡的db是遷移命令,和之前的【db = SQLAlchemy(app)】中的資料庫物件db不一樣哦。

好的,現在開始資料庫的遷移的相關操作了:

①建立遷移倉庫:

這個命令會建立migrations資料夾,所有遷移檔案都放在裡面。

在pycharm的終端裡面執行這段程式碼哦:

python database.py db init

在執行這段程式碼後,我們的 database.py 的相同等級目錄下就會出現migrations這個資料夾,然後,咱們的所有遷移檔案都會儲存在versions裡面:如下圖 在這裡插入圖片描述

②建立遷移指令碼:

就是建立存放在versions裡面的檔案:

python database.py db migrate -m 'initial migration'

-m 是註釋,後面的內容寫本次遷移修改的內容 下面versions裡面是增加了一個遷移檔案吧… 在這裡插入圖片描述

③更新到資料庫:

遷移檔案生成之後,我們就需要提交到資料庫了吧:

python database.py db upgrade

④返回以前的版本:

當然,咱們在這個資料庫遷移是很人性化的,如果你修改遷移之後後悔了,是有後悔藥可以吃的:

首先,先看看你想遷移了哪些版本:

python datanase.py db history

輸出格式: -> 版本號 (head), initial migration

回滾到指定版本:

python database.py db downgrade 版本號

程式碼:

from flask import Flask
from flask.ext.script import Manager
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate, MigrateCommand

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://xiaomin:[email protected]:8888/xiaominsql'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

db = SQLAlchemy(app)

Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)


@app.route('/')
def index():
    return 'hello world'


class Role(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(64))
    category = db.Column(db.String(64))


if __name__ == '__main__':
    manager.run()
實際應用的操作步驟,參考如下:

1.python 檔案 db init 2.python 檔案 db migrate -m"版本名(註釋)" 3.python 檔案 db upgrade 然後觀察表結構 4.根據需求修改模型 5.python 檔案 db migrate -m"新版本名(註釋)" 6.python 檔案 db upgrade 然後觀察表結構 7.若返回版本,則利用 python 檔案 db history檢視版本號 8.python 檔案 db downgrade(upgrade) 版本號