Flask 組件 Migrate

Migrate 簡介

Migrate 類似於 Django 中的 manager.py 的 migrate,它的作用是將我們寫好的 ORM 類對象,遷移到數據庫中

數據庫遷移操作順序

  1. python 文件 db init

  2. 根據需求修改模型

  3. python flaskapp文件 db migrate -m"新版本名(註釋)"

  4. python flaskapp文件 db upgrade 然後觀察表結構

  5. 若返回版本,則利用 python 文件 db history查看版本號

  6. python 文件 db downgrade(upgrade) 版本號

編寫 ORM 對象

#!/usr/bin/env python3
# -*- 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+mysqldb://root:[email protected]:3306/flask_demo'
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

db = SQLAlchemy(app)


# 第一個參數是Flask的實例,第二個參數是Sqlalchemy數據庫實例
migrate = Migrate(app, db)

# manager是Flask-Script的實例,這條語句在flask-Script中添加一個db命令
manager.add_command('db', MigrateCommand)


# 定義模型Role
class Role(db.Model):
    # 定義表名
    __tablename__ = 'roles'
    # 定義列對象
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    user = db.relationship('User', backref='role')

    # repr()方法顯示一個可讀字符串,
    def __repr__(self):
        return 'Role:'.format(self.name)


# 定義用戶
class User(db.Model):
    __talbe__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True, index=True)
    # 設置外鍵
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

    def __repr__(self):
        return 'User:'.format(self.username)


if __name__ == '__main__':
    manager.run()

創建遷移倉庫

python manager.py db init

創建遷移腳本

自動創建遷移腳本有兩個函數

upgrade():函數把遷移中的改動應用到數據庫中

downgrade():函數則將改動刪除

自動創建的遷移腳本會根據模型定義和數據庫當前狀態的差異,生成 upgrade()downgrade() 函數的內容

對比不一定完全正確,有可能會遺漏一些細節,需要進行檢查

python manager.py db migrate

更新數據庫

python manager.py db upgrade

返回以前的版本

可以根據 history 命令找到版本號,然後傳給downgrade命令:

python app.py db history

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

回滾到指定版本

python app.py db downgrade 版本號

參考文章:https://www.cnblogs.com/sablier/p/11084080.html#283342143

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章