Flask資料庫遷移擴充套件 Flask-Migrate 和 Flask-Script
使用Flsak-Migrate資料庫遷移框架,可以保證資料庫結構在發生變化時,改變資料庫結構不至於丟失資料庫的資料。使用其進行資料庫進行資料庫的遷移,主要分為三個步驟:
1 建立資料倉庫
首先通過mysql資料庫命令列新建資料庫test.
然後我們要在test.py中佈置相關環境:
import os,json from flask import Flask, render_template, session, redirect, url_for from flask_script import Manager,Shell from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate,MigrateCommand app = Flask(__name__) app.config['SECRET_KEY'] = 'hard to guess string' app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:
[email protected]/test?charset=utf8' #app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db' app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True manager = Manager(app) db = SQLAlchemy(app) migrate = Migrate(app,db) class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), unique=True, index=True) age = db.Column(db.String(64)) .... def __repr__(self): return '<User %r>' % self.username def make_shell_context(): return dict(app=app, db=db, User=User) # manager.add_command("shell", Shell(make_context=make_shell_context)) manager.add_command('db', MigrateCommand) if __name__ == '__main__': manager.run()
這裡我們引入了Manager模組用來使啟動flask時支援命令列。首先,分別引入了migrate模組和Manager相關模組;建立了一個manager物件,以支援自定義命令的配置;建立一個Migrate物件並關聯對應的應用程式類物件app和資料庫管理類物件db;最後一行將MigrateCommand命令加入到manager物件中,這樣就可以在命令列中進行資料庫遷移的相關命令.
需要注意的是,引入Manager支援啟動應用程式的命令列時,我們還需要修改app的run語句,改為:
if __name__=='__main__':
- manager.run()
接下來我們使用命令列模式建立一個遷移的倉庫:
>>> python test.py db init
'db'是在manager.add_command('db',MigrateComand)這句中我們宣告的命令列物件名稱,init是Migrate命令,表示初始化遷移倉庫,執行完成之後,會在當前目錄下建立一個migrations的資料夾,用於進行遷移的資料庫指令碼都放在這裡.
2 建立遷移指令碼
使用migarate子命令來建立資料庫遷移指令碼,在此之前我們先改動一下資料庫的模型來驗證遷移是否成功,我們在User模型中新增age屬性:
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
age = db.Column(db.String(64))我們檢查下是否更新成功:
python test.py db migrate
3 資料庫更新
python test.py db upgrade
成功進行了更新。
Flask-Migrate 官方文件:https://flask-migrate.readthedocs.io/en/latest/