Flask數(shù)據(jù)庫創(chuàng)建以及升級流程

最近學(xué)習(xí)《Flask Web開發(fā)》,數(shù)據(jù)庫創(chuàng)建使用以及升級流程總是讓我感到混亂睬塌,因此總結(jié)一下啄枕。

Flask數(shù)據(jù)庫用到兩個庫:Flask-SQLAlchemy和Flask-Migrate

  • 使用Flask-SQLAlchemy管理數(shù)據(jù)庫
  • 使用Flask-Migrate實現(xiàn)數(shù)據(jù)庫遷移

安裝:

pip install Flask-SQLAlchemy
pip install Flask-Migrate

創(chuàng)建數(shù)據(jù)庫

  • 進入python shell
    python manage.py shell 
    
    導(dǎo)入db
    from app import db
    
    導(dǎo)入model中User Role模型(這個很重要,要不創(chuàng)建出數(shù)據(jù)庫后會沒有表)
    from app.models import Role,User
    
  • 創(chuàng)建數(shù)據(jù)庫
    db.create_all()
    

執(zhí)行完成之后,會生成一個data.sqlite文件情臭,文件中會生成相應(yīng)的表,如果上步?jīng)]有引入Role,User,這里創(chuàng)建出來文件里會沒有對應(yīng)的表

數(shù)據(jù)庫遷移

第一次使用
  1. 初始化:
    python manage.py db init 
    
    這個命令會在項目下創(chuàng)建 migrations 文件夾,所有遷移腳本都存放其中运提。
  2. 創(chuàng)建第一個版本:
    python manage.py db migrate -m "initial migration"  
    
    檢查migrations\versions,會新建一個版本.py闻葵,檢查里面表格及字段民泵,此時數(shù)據(jù)庫中會自動創(chuàng)建一個alembic_version表格,用于記錄數(shù)據(jù)庫版本信息
  3. 運行升級
    python manage.py db upgrade
    
    會把項目使用的數(shù)據(jù)庫文件槽畔,更新為新的表格栈妆、字段,同時保留數(shù)據(jù)
數(shù)據(jù)庫更新
  1. 更新表格的字段 (models.py)
  2. 再次運行一下
    python manage.py db migrate -m "commit" 
    
    相當(dāng)于commit 更新到/migrate目錄
  3. 數(shù)據(jù)庫更新
    python manage.py db upgrade  
    
    數(shù)據(jù)庫會更新
數(shù)據(jù)庫字段回滾

獲取 History ID

python manage.py db history

回滾到某個 history

python manage.py db downgrade <history_id>

注意

  1. 數(shù)據(jù)庫遷移的時候厢钧,如果manage.py里沒有導(dǎo)入Role和User鳞尔,模型對應(yīng)表結(jié)構(gòu),遷移腳本拿不到模型早直,就會刪除數(shù)據(jù)庫里對應(yīng)的表寥假。這地方掉坑里好久。
  2. 在創(chuàng)建數(shù)據(jù)庫的時候也需要導(dǎo)入模型Role和User

為了避免一直重復(fù)導(dǎo)入霞扬,我們可以做些配置糕韧,讓 Flask-Script 的 shell 命令自動導(dǎo)入特定的對象枫振。
所以我們干脆在manage.py文件里統(tǒng)一代碼處理,減少出錯的可能性:

  1. 導(dǎo)入相應(yīng)文件:Shell(和python shell相關(guān))萤彩,User, Role數(shù)據(jù)模型

    from flask_script import Shell
    from app.models import User, Role
    

    此時數(shù)據(jù)庫升級的時候就能拿到模型知道表結(jié)構(gòu)了粪滤,可以正常升級了。還可以進一步處理在創(chuàng)建數(shù)據(jù)庫的時候也不需要手動導(dǎo)入:

  2. def make_shell_context():
        return dict(app=app, db=db, User=User, Role=Role)
    manager.add_command('shell', Shell(make_context=make_shell_context))
    

這樣做了之后創(chuàng)建數(shù)據(jù)庫時不需要這一步:

from app.models import Role,User

導(dǎo)入模型乒疏。
其余不變额衙,不會再導(dǎo)致表丟失的問題

參考:

http://blog.csdn.net/kevin_qq/article/details/51777190

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市怕吴,隨后出現(xiàn)的幾起案子窍侧,更是在濱河造成了極大的恐慌,老刑警劉巖转绷,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伟件,死亡現(xiàn)場離奇詭異,居然都是意外死亡议经,警方通過查閱死者的電腦和手機斧账,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來煞肾,“玉大人咧织,你說我怎么就攤上這事〖龋” “怎么了习绢?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蝙昙。 經(jīng)常有香客問我闪萄,道長,這世上最難降的妖魔是什么奇颠? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任败去,我火速辦了婚禮,結(jié)果婚禮上烈拒,老公的妹妹穿的比我還像新娘圆裕。我一直安慰自己,他們只是感情好荆几,可當(dāng)我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布吓妆。 她就那樣靜靜地躺著,像睡著了一般伴郁。 火紅的嫁衣襯著肌膚如雪耿战。 梳的紋絲不亂的頭發(fā)上蛋叼,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天焊傅,我揣著相機與錄音剂陡,去河邊找鬼。 笑死狐胎,一個胖子當(dāng)著我的面吹牛鸭栖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播握巢,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼晕鹊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了暴浦?” 一聲冷哼從身側(cè)響起溅话,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎歌焦,沒想到半個月后飞几,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡独撇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年屑墨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纷铣。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡卵史,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出搜立,到底是詐尸還是另有隱情以躯,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布儒拂,位于F島的核電站寸潦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏社痛。R本人自食惡果不足惜见转,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蒜哀。 院中可真熱鬧斩箫,春花似錦、人聲如沸撵儿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淀歇。三九已至易核,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浪默,已是汗流浹背牡直。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工缀匕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碰逸。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓乡小,卻偏偏與公主長得像,于是被迫代替她去往敵國和親饵史。 傳聞我的和親對象是個殘疾皇子满钟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,678評論 2 354

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

  • 22年12月更新:個人網(wǎng)站關(guān)停,如果仍舊對舊教程有興趣參考 Github 的markdown內(nèi)容[https://...
    tangyefei閱讀 35,181評論 22 257
  • 上一章3 郁單國 穿越女穆惜凡大睡了一天一夜胳喷,發(fā)現(xiàn)自己跟以前長得不大一樣湃番,但又能看得出自己原來的模樣。這個時空實在...
    要飯團閱讀 519評論 0 0
  • 丁酉年 己酉月 己未日 金木水火土里吭露,己是土牵辣,未是木庫,木克土奴饮,己土坐在很多很多克自己的東西上纬向,會很辛苦吧。 未戴卜,...
    黃謙頤閱讀 666評論 0 6
  • 你畫樹的臉逾条, 人看著的風(fēng)霜 你潑墨染成年月; 你留人的影投剥, 迎著他的過往 目送她的遠去师脂; 你聽路的心, 多少腳步輕...
    含深閱讀 190評論 0 0