Flask?數(shù)據(jù)庫(kù)遷移詳情
1、使用 Flask-Migrate 實(shí)現(xiàn)數(shù)據(jù)庫(kù)遷移
db.create_all()
不會(huì)重新創(chuàng)建表或是更新表,需要先使用db.drop_all()
刪除數(shù)據(jù)庫(kù)中所有的表之后再調(diào)用db.create_all()
才能重新創(chuàng)建表,但是這樣的話,原來(lái)表中的數(shù)據(jù)就都被刪除了,這肯定是不行的,這時(shí)就出現(xiàn)了數(shù)據(jù)庫(kù)遷移的概念。
在開發(fā)過程中,隨著需求的變化,有可能需要添加或修改表的一些字段,但是原表中的數(shù)據(jù)不能刪除,此時(shí)就需要?jiǎng)?chuàng)建新表,并將舊表中的數(shù)據(jù)遷移至新表中,Flask-Migrate
這個(gè)擴(kuò)展就可以在不破壞數(shù)據(jù)的情況下更新數(shù)據(jù)庫(kù)表的結(jié)構(gòu),并完成數(shù)據(jù)從舊表到新表的遷移。
2、Flask-Migrate的使用
可以使用pip install flask-migrate
進(jìn)行安裝。在程序中,我們實(shí)例化 Flask_Migrate
提供的 Migrate
類,進(jìn)行初始化操作。
from flask_migrate import Migrate from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) ··· db = SQLAlchemy(app) migrate = Migrate(app, db)
實(shí)例化 Migrate
類,需要傳入 Flask
實(shí)例 app
和 SQLAlchemy
創(chuàng)建的實(shí)例 db。
2.1 數(shù)據(jù)庫(kù)的遷移過程
先定義 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)
2.1.1 創(chuàng)建遷移環(huán)境
在開始遷移數(shù)據(jù)之前,需要先使用下面的命令創(chuàng)建一個(gè)遷移環(huán)境:
flask db init
遷移環(huán)境只需創(chuàng)建一次,創(chuàng)建后會(huì)在項(xiàng)目根目錄下生成一個(gè) migrations 目錄,其中包含了自動(dòng)生成的配置文件和遷移版本目錄。
2.1.2 生成遷移腳本
使用如下命令自動(dòng)生成遷移腳本:
flask db migrate -m "create_table"
-m
選項(xiàng)添加備注信息,執(zhí)行后遷移版本目錄生成了遷移腳本。
遷移腳本內(nèi)有兩個(gè)函數(shù):
upgrade()
:把遷移中的改動(dòng)應(yīng)用到數(shù)據(jù)庫(kù)中downgrade()
:將改動(dòng)撤銷
自動(dòng)生成的遷移腳本會(huì)根據(jù)模型定義和數(shù)據(jù)庫(kù)當(dāng)前狀態(tài)的差異,生成upgrade()
和downgrade()
函數(shù)的內(nèi)容,不一定完全正確,有必要再進(jìn)行檢查一下。
2.1.3 更新數(shù)據(jù)庫(kù)
生成了遷移腳本后,使用flask db upgrade
命令可完成對(duì)數(shù)據(jù)庫(kù)的更新。執(zhí)行后即可生成數(shù)據(jù)庫(kù)及表。
如果之后我們需要改動(dòng) user
表中的字段,比如添加一個(gè)mobile
字段,我們只需在 User
模型類中添加該屬性,之后執(zhí)行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)
如果想要回滾遷移的話,可以執(zhí)行flask db downgrade命令。
3、總結(jié)
這里只是介紹如何在 Flask 中進(jìn)行數(shù)據(jù)庫(kù)遷移,關(guān)于在生產(chǎn)環(huán)境下,是否需要使用遷移工具或者使用何種工具進(jìn)行遷移,這里不做討論,至于我的話,在生產(chǎn)環(huán)境中,我沒有使用過Flask-Migrat
e
,而是選擇編寫 SQL 腳本來(lái)處理數(shù)據(jù)庫(kù)及表的更新或改動(dòng),我覺得這樣更不容易出錯(cuò),其實(shí)各有各的好處,看自己選擇。
到此這篇關(guān)于 Flask 數(shù)據(jù)庫(kù)遷移詳情的文章就介紹到這了,更多相關(guān) Flask 數(shù)據(jù)庫(kù)遷移內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python之lambda表達(dá)式與sort函數(shù)中的key用法
這篇文章主要介紹了python之lambda表達(dá)式與sort函數(shù)中的key用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08python實(shí)戰(zhàn)小游戲之考驗(yàn)記憶力
本篇文章介紹了用python編寫的曾經(jīng)風(fēng)靡的考驗(yàn)記憶力的小游戲,詳細(xì)介紹了整個(gè)思路和過程以及代碼,通讀本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下2021-09-09使用python批量轉(zhuǎn)換文件編碼為UTF-8的實(shí)現(xiàn)
這篇文章主要介紹了使用python批量轉(zhuǎn)換文件編碼為UTF-8的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Python 從一個(gè)文件中調(diào)用另一個(gè)文件的類方法
今天小編就為大家分享一篇Python 從一個(gè)文件中調(diào)用另一個(gè)文件的類方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-01-01nginx+uwsgi+django環(huán)境搭建的方法步驟
這篇文章主要介紹了nginx+uwsgi+django環(huán)境搭建的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11解決Pytorch 訓(xùn)練與測(cè)試時(shí)爆顯存(out of memory)的問題
今天小編就為大家分享一篇解決Pytorch 訓(xùn)練與測(cè)試時(shí)爆顯存(out of memory)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-08-08