Flask擺弄記錄(7)-數(shù)據(jù)庫升級和回滾


數(shù)據(jù)庫變更和升級的問題


開發(fā)過程中,雖然絕大多數(shù)的項(xiàng)目開發(fā)之前都會(huì)完成數(shù)據(jù)庫的表結(jié)構(gòu)進(jìn)行設(shè)計(jì)饮亏。但是隨著一些需求的深入和業(yè)務(wù)的探索温眉,不可避免的會(huì)出現(xiàn)數(shù)據(jù)模型需要被修改的問題。

flask中珍手,我們會(huì)使用一些ORM框架來解決我們的問題。例如前面提及的flask-sqlalchemy辞做,是對flask應(yīng)用增加sqlachemy支持的擴(kuò)展插件琳要。
創(chuàng)建了各種數(shù)據(jù)模型在應(yīng)用之中,怎么去更好的記錄數(shù)據(jù)庫結(jié)構(gòu)的變化和怎么實(shí)現(xiàn)數(shù)據(jù)庫修改的前后滾動(dòng)呢秤茅?大神們已經(jīng)給我們準(zhǔn)備好了好道具:Alembic稚补。

Alembic為我們提供了好的數(shù)據(jù)庫修改記錄和升降級的功能。實(shí)現(xiàn)了一個(gè)類似GIT一樣的功能框喳。

而在flask中也有相應(yīng)的擴(kuò)展插件:flask-migrate


  1. 安裝flask-migrate

    pip install flask-migrate
    
  2. 應(yīng)用部署
    修改應(yīng)用中的相關(guān)文件课幕。
    datatube/datatube/model/user.py

    from datatube import db
    
    
    class User(db.Model):
        __tablename__ = 'con_user'
        id = db.Column(db.INTEGER, primary_key=True)
        name = db.Column(db.String(30))
        secretkey = db.Column(db.String(100))
        status = db.Column(db.Boolean)
    
        def __init__(self, name, status):
            self.name = name
            self.status = status
    
        def __repr__(self):
            return 'User %r,Status % r' % (self.name,   self.status)
    
    

    datatube/datatube/__init__.py

    from flask import Flask
    from flask_migrate import Migrate, MigrateCommand
    from flask_script import Manager
    from flask_sqlalchemy import SQLAlchemy
    
    from datatube.config import DevConfig
    
    # 初始化應(yīng)用
    app = Flask(__name__)
    
    # 從config中加載配置文件內(nèi)容 config上線模式 devConfig開發(fā)模式
    app.config.from_object(DevConfig)
    
    # 初始化數(shù)據(jù)庫
    db = SQLAlchemy(app)
    
    # 初始化migrate
    migrate = Migrate(app, db)
    
    # 初始化manager
    manager = Manager(app)
    
    # command加載DB命令,可以使用migrate
    manager.add_command('db', MigrateCommand)
    
    from datatube.interface import demo
    
    
  3. 使用flask-migrate來更新升級

    進(jìn)入cmd,進(jìn)入環(huán)境:

    python manage.py db init
    

    這時(shí)候我們可以看到應(yīng)用目錄先生成了一個(gè)migrations文件夾

    再輸入

    python manage.py db migrate -m "init"
    

    migrations文件件中的versions多出了一個(gè)py文件:

    versions里面的這個(gè)文件就是剛才migrate操作后生成的文件五垮,里面包含了此次對數(shù)據(jù)庫變更的記錄乍惊。

    再輸入

    python manage.py db upgrade
    

    upgrade語句將自動(dòng)讀取剛才生成的文件,將數(shù)據(jù)庫結(jié)構(gòu)更新到數(shù)據(jù)庫中放仗。多處修改一次完成润绎,不需要在手動(dòng)去數(shù)據(jù)庫用SQL一句句操作。

  4. 對數(shù)據(jù)庫的回滾

    # 獲取 History ID
    python manage.py db history
    
    
    # 回滾到某個(gè) history
    python manage.py db downgrade <history_id>
    

    用以上的操作回滾到歷史上的一個(gè)數(shù)據(jù)庫版本。用法和GIT類似莉撇,依舊十分方便呢蛤。

以上就是使用flask-migrate來管理數(shù)據(jù)庫結(jié)構(gòu)變更的方法了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稼钩,一起剝皮案震驚了整個(gè)濱河市顾稀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坝撑,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粮揉,死亡現(xiàn)場離奇詭異巡李,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)扶认,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門侨拦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辐宾,你說我怎么就攤上這事狱从。” “怎么了叠纹?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵季研,是天一觀的道長。 經(jīng)常有香客問我誉察,道長与涡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任持偏,我火速辦了婚禮驼卖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鸿秆。我一直安慰自己酌畜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布卿叽。 她就那樣靜靜地躺著桥胞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪附帽。 梳的紋絲不亂的頭發(fā)上埠戳,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機(jī)與錄音蕉扮,去河邊找鬼整胃。 笑死,一個(gè)胖子當(dāng)著我的面吹牛喳钟,可吹牛的內(nèi)容都是我干的屁使。 我是一名探鬼主播在岂,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蛮寂!你這毒婦竟也來了蔽午?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤酬蹋,失蹤者是張志新(化名)和其女友劉穎及老,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體范抓,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骄恶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匕垫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片僧鲁。...
    茶點(diǎn)故事閱讀 40,680評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖象泵,靈堂內(nèi)的尸體忽然破棺而出寞秃,到底是詐尸還是另有隱情,我是刑警寧澤偶惠,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布春寿,位于F島的核電站,受9級特大地震影響洲鸠,放射性物質(zhì)發(fā)生泄漏堂淡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一扒腕、第九天 我趴在偏房一處隱蔽的房頂上張望绢淀。 院中可真熱鬧,春花似錦瘾腰、人聲如沸皆的。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽费薄。三九已至,卻和暖如春栖雾,著一層夾襖步出監(jiān)牢的瞬間楞抡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工析藕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留召廷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像竞慢,于是被迫代替她去往敵國和親先紫。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容