Flask擴充套件之 【Flask-Migrate】資料庫的遷移
資料庫遷移:
- 在開發過程中,需要修改資料庫模型,而且還要在修改之後更新資料庫。最直接的方式就是刪除舊錶,但這樣會丟失資料。
- 更好的解決辦法是使用資料庫遷移框架,它可以追蹤資料庫模式的變化,然後把變動應用到資料庫中。
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) 版本號