簡單分析Flask 資料庫遷移詳情

大雄45發表於2021-12-06
導讀 本文給大家分享的是 Flask 資料庫遷移詳情,db.create_all()不會重新建立表或是更新表,需要先使用db.drop_all()刪除資料庫中所有的表之後再呼叫db.create_all()才能重新建立表,但是這樣的話,原來表中的資料就都被刪除了,這肯定是不行的,這時就出現了資料庫遷移的概念
1、使用 Flask-Migrate 實現資料庫遷移

db.create_all()不會重新建立表或是更新表,需要先使用db.drop_all()刪除資料庫中所有的表之後再呼叫db.create_all()才能重新建立表,但是這樣的話,原來表中的資料就都被刪除了,這肯定是不行的,這時就出現了資料庫遷移的概念。

在開發過程中,隨著需求的變化,有可能需要新增或修改表的一些欄位,但是原表中的資料不能刪除,此時就需要建立新表,並將舊錶中的資料遷移至新表中,Flask-Migrate這個擴充套件就可以在不破壞資料的情況下更新資料庫表的結構,並完成資料從舊錶到新表的遷移。

2、Flask-Migrate的使用

可以使用pip install flask-migrate進行安裝。在程式中,我們例項化 Flask_Migrate 提供的 Migrate 類,進行初始化操作。

from flask_migrate import Migrate
 
from flask_sqlalchemy import SQLAlchemy
 
app = Flask(__name__)
 
···
 
db = SQLAlchemy(app)
 
migrate = Migrate(app, db)

例項化 Migrate 類,需要傳入 Flask 例項 app 和 SQLAlchemy建立的例項 db。

2.1 資料庫的遷移過程

先定義 User 模型類。

class User(db.Model):
 
    __tablename__ = 'user'
 
    id = db.Column(db.Integer, primary_key=True)
 
    user_name = db.Column(db.String)
 
    password = db.Column(db.String)
建立遷移環境

在開始遷移資料之前,需要先使用下面的 建立一個遷移環境:

flask db init

遷移環境只需建立一次,建立後會在專案根目錄下生成一個 migrations 目錄,其中包含了自動生成的配置檔案和遷移版本目錄。

生成遷移

使用如下 自動生成遷移 :

flask db migrate -m "create_table"

-m 選項新增備註資訊,執行後遷移版本目錄生成了遷移指令碼。

遷移指令碼內有兩個函式:

upgrade():把遷移中的改動應用到資料庫中

downgrade():將改動撤銷

自動生成的遷移指令碼會根據模型定義和資料庫當前狀態的差異,生成upgrade()和downgrade()函式的內容,不一定完全正確,有必要再進行檢查一下。

更新資料庫

生成了遷移指令碼後,使用flask db upgrade命令可完成對資料庫的更新。執行後即可生成資料庫及表。

如果之後我們需要改動 user 表中的欄位,比如新增一個mobile欄位,我們只需在 User 模型類中新增該屬性,之後執行flask db migrate -m '註釋'和flask db upgrade命令即可。

class User(db.Model):
 
    __tablename__ = 'user'
 
    id = db.Column(db.Integer, primary_key=True)
 
    user_name = db.Column(db.String)
 
    password = db.Column(db.String)
 
    mobile = db.Column(db.String)

如果想要回滾遷移的話,可以執行flask db downgrade命令。

3、總結

這裡只是介紹如何在 Flask 中進行資料庫遷移,關於在生產環境下,是否需要使用遷移工具或者使用何種工具進行遷移,這裡不做討論,至於我的話,在生產環境中,我沒有使用過Flask-Migrate,而是選擇編寫 SQL 指令碼來處理資料庫及表的更新或改動,我覺得這樣更不容易出錯,其實各有各的好處,看自己選擇。

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2845928/,如需轉載,請註明出處,否則將追究法律責任。

相關文章