簡單分析Flask 資料庫遷移詳情
導讀 | 本文給大家分享的是 Flask 資料庫遷移詳情,db.create_all()不會重新建立表或是更新表,需要先使用db.drop_all()刪除資料庫中所有的表之後再呼叫db.create_all()才能重新建立表,但是這樣的話,原來表中的資料就都被刪除了,這肯定是不行的,這時就出現了資料庫遷移的概念 |
db.create_all()不會重新建立表或是更新表,需要先使用db.drop_all()刪除資料庫中所有的表之後再呼叫db.create_all()才能重新建立表,但是這樣的話,原來表中的資料就都被刪除了,這肯定是不行的,這時就出現了資料庫遷移的概念。
在開發過程中,隨著需求的變化,有可能需要新增或修改表的一些欄位,但是原表中的資料不能刪除,此時就需要建立新表,並將舊錶中的資料遷移至新表中,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。
先定義 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命令。
這裡只是介紹如何在 Flask 中進行資料庫遷移,關於在生產環境下,是否需要使用遷移工具或者使用何種工具進行遷移,這裡不做討論,至於我的話,在生產環境中,我沒有使用過Flask-Migrate,而是選擇編寫 SQL 指令碼來處理資料庫及表的更新或改動,我覺得這樣更不容易出錯,其實各有各的好處,看自己選擇。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2845928/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- flask資料庫遷移 No changes in schema detected.Flask資料庫
- flask資料庫遷移是什麼意思Flask資料庫
- 資料庫遷移資料庫
- Centos MySQL資料庫遷移詳細步驟CentOSMySql資料庫
- redis資料庫遷移Redis資料庫
- 資料庫遷移 :理解資料庫
- laravel資料庫遷移Laravel資料庫
- linux mysql資料庫遷移LinuxMySql資料庫
- django資料庫遷移-15Django資料庫
- 用rman遷移資料庫資料庫
- 資料庫遷移手記資料庫
- 遷移MySQL 5.7資料庫MySql資料庫
- 資料庫遷移神器——Flyway資料庫
- dm資料庫遷移命令資料庫
- SQL Server資料庫遷移SQLServer資料庫
- 案例分析:700G SQL Server資料庫遷移HGSQLServer資料庫
- 雲資料庫管理與資料遷移資料庫
- dnf資料庫備份&遷移資料庫
- OGG資料庫遷移方案(一)資料庫
- OGG資料庫遷移方案(二)資料庫
- OGG資料庫遷移方案(三)資料庫
- OGG資料庫遷移方案(四)資料庫
- 資料庫邏輯遷移方案資料庫
- 13、flask-模型-models-模型配置使用-資料遷移Flask模型
- 遷移資料庫資料考慮問題資料庫
- Oracle資料庫(資料泵)遷移方案(上)Oracle資料庫
- Oracle資料庫(資料泵)遷移方案(下)Oracle資料庫
- 無外網Oracle資料庫遷移Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(上)Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(中)Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(下)Oracle資料庫
- Laravel migration (資料庫遷移) 的使用Laravel資料庫
- 騰訊雲 雲資料庫遷移資料庫
- laravel 資料庫遷移時報錯Laravel資料庫
- WindowsServer 2012資料庫遷移記錄WindowsServer資料庫
- Laravel 學習之資料庫遷移Laravel資料庫
- EF 中多個資料庫遷移資料庫
- ORM實操之資料庫遷移ORM資料庫