Flask-migrate基本使用方法


數據庫遷移操作順序:

  • 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) 版本號

首先要在虛擬環境中安裝Flask-Migrate。

pip install flask-migrate

flaskapp代碼文件內容,如果項目比較大則需要拆成三個文件:

#coding=utf-8
from flask import Flask

from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate,MigrateCommand
from flask_script import Shell,Manager

app = Flask(__name__)
manager = Manager(app)

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/Flask_test'
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()

創建遷移倉庫

  • 這個命令會創建migrations文件夾,所有遷移文件都放在里面。
python database.py db init   # 將database.py替換為有manager.run()的執行文件

創建遷移腳本

  • 自動創建遷移腳本有兩個函數
    • upgrade():函數把遷移中的改動應用到數據庫中。
    • downgrade():函數則將改動刪除。
  • 自動創建的遷移腳本會根據模型定義和數據庫當前狀態的差異,生成upgrade()和downgrade()函數的內容。
  • 對比不一定完全正確,有可能會遺漏一些細節,需要進行檢查
python database.py db migrate -m 'initial migration'  # 第一次遷移不要使用 - m

更新數據庫

python database.py db upgrade

返回以前的版本

  • 可以根據history命令找到版本號,然后傳給downgrade命令:
python app.py db history

輸出格式:<base> ->  版本號 (head), initial migration
  • 回滾到指定版本
python app.py db downgrade 版本號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM