欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python的Flask框架中使用Flask-Migrate擴展遷移數(shù)據(jù)庫的教程

 更新時間:2016年06月14日 15:53:09   作者:ipython  
Flask-Migrate可以幫助Flask應(yīng)用程序通過預(yù)設(shè)的Python腳本完成數(shù)據(jù)庫遷移操作,這里我們就來看一下Python的Flask框架中使用Flask-Migrate擴展遷移數(shù)據(jù)庫的教程,需要的朋友可以參考下

我們在升級系統(tǒng)的時候,經(jīng)常碰到需要更新服務(wù)器端數(shù)據(jù)結(jié)構(gòu)等操作,之前的方式是通過手工編寫alter sql腳本處理,經(jīng)常會發(fā)現(xiàn)遺漏,導(dǎo)致程序發(fā)布到服務(wù)器上后無法正常使用。

現(xiàn)在我們可以使用Flask-Migrate插件來解決之,F(xiàn)lask-Migrate插件是基于Alembic,Alembic是由大名鼎鼎的SQLAlchemy作者開發(fā)數(shù)據(jù)遷移工具。

具體操作如下:

1. 安裝Flask-Migrate插件

$ pip install Flask-Migrate

2. 修改Flask App部分的代碼,以增加Migrate相關(guān)的Command
db = SQLAlchemy(app)
migrate = Migrate(app, db)

manager = Manager(app)
manager.add_command('db', MigrateCommand)

3. 初始化

$ python app.py db init

使用Flask-Migrate遷移數(shù)據(jù)庫
隨著開發(fā)進度不斷向前,你會發(fā)現(xiàn)你的數(shù)據(jù)庫模型需要更改,而當(dāng)這種情況發(fā)生時需要更新數(shù)據(jù)庫。

Flask-SQLAlchemy只有當(dāng)數(shù)據(jù)庫表不存在了才從模型創(chuàng)建它們,所以更新表的唯一途徑就是銷毀舊的表,當(dāng)然這將導(dǎo)致所有數(shù)據(jù)庫中的數(shù)據(jù)丟失。

有個更好的解決方案就是使用數(shù)據(jù)庫遷移框架。和源碼版本控制工具跟蹤更改源碼文件一樣,數(shù)據(jù)庫遷移框架跟蹤更改數(shù)據(jù)庫模型,然后將增量變化應(yīng)用到數(shù)據(jù)庫中。

SQLAlchemy的主要開發(fā)人員寫了一個Alembic遷移框架,但我們不直接使用Alembic,F(xiàn)lask應(yīng)用可以使用Flask-Migrate擴展,一個集成了Flask-Script來提供所有操作命令的輕量級Alembic包。

4. 創(chuàng)建遷移倉庫

首先,F(xiàn)lask-Migrate必須已經(jīng)安裝到虛擬環(huán)境中:

(venv) $ pip install flask-migrate

下面展示擴展如何初始化:

from flask.ext.migrate import Migrate, MigrateCommand 

# ...

migrate = Migrate(app, db)
manager.add_command('db', MigrateCommand)

為了可以使用數(shù)據(jù)庫遷移命令,F(xiàn)lask-Migrate提供MigrateCommand類來連接Flask-Script的manager對象。在這個示例中使用db來連接到命令。

在數(shù)據(jù)庫遷移可以維護之前,必須通過init子命令來創(chuàng)建一個遷移庫:

(venv) $ python hello.py db init
 Creating directory /home/flask/flasky/migrations...done
 Creating directory /home/flask/flasky/migrations/versions...done
 Generating /home/flask/flasky/migrations/alembic.ini...done
 Generating /home/flask/flasky/migrations/env.py...done
 Generating /home/flask/flasky/migrations/env.pyc...done
 Generating /home/flask/flasky/migrations/README...done
 Generating /home/flask/flasky/migrations/script.py.mako...done
 Please edit configuration/connection/logging settings in
 '/home/flask/flasky/migrations/alembic.ini' before proceeding.

這個命令創(chuàng)建一個migrations文件夾,里面存放了所有遷移腳本。

建議:如果你有克隆在GitHub上的應(yīng)用程序,你現(xiàn)在可以運行g(shù)it checkout 5c來切換到這個版本的應(yīng)用程序。

5. 創(chuàng)建遷移腳本

在Alembic,數(shù)據(jù)庫遷移工作由遷移腳本完成。這個腳本有兩個函數(shù),分別叫做upgrade()和downgrade()。upgrade()函數(shù)實施數(shù)據(jù)庫更改,是遷移的一部分,downgrade()函數(shù)則刪除它們。通過添加和刪除數(shù)據(jù)庫變化的能力,Alembic可以重新配置數(shù)據(jù)庫從歷史記錄中的任何時間點。

Alembic遷移可以分別使用revision和migrate命令手動或自動創(chuàng)建。手動遷移通過由開發(fā)人員使用Alembic的Operations對象指令實現(xiàn)的空upgrade()和downgrade()函數(shù)創(chuàng)建遷移框架腳本。另一方面,自動遷移通過尋找模型定義和數(shù)據(jù)庫當(dāng)前狀態(tài)間的不同為upgrade()和downgrade()生成代碼。

警告:自動遷移并不總是準(zhǔn)確的,可以忽略一些細(xì)節(jié)。所以應(yīng)該經(jīng)常審查一下自動生成的遷移腳本。
migrate子命令創(chuàng)建自動遷移腳本:

(venv) $ python hello.py db migrate -m "initial migration"
INFO [alembic.migration] Context impl SQLiteImpl.
INFO [alembic.migration] Will assume non-transactional DDL.
INFO [alembic.autogenerate] Detected added table 'roles'
INFO [alembic.autogenerate] Detected added table 'users'
INFO [alembic.autogenerate.compare] Detected added index
'ix_users_username' on '['username']'
 Generating /home/flask/flasky/migrations/versions/1bc
 594146bb5_initial_migration.py...done

建議:如果你有克隆在GitHub上的應(yīng)用程序,你現(xiàn)在可以運行g(shù)it checkout 5c來切換到這個版本的應(yīng)用程序。注意,你不需要為這個應(yīng)用生成migrations,所有的遷移腳本都包含在版本庫中。
6. 更新數(shù)據(jù)庫

一旦遷移腳本被審查且接受,就可以使用db upgrade命令更新到數(shù)據(jù)庫中:

(venv) $ python hello.py db upgrade
INFO [alembic.migration] Context impl SQLiteImpl.
INFO [alembic.migration] Will assume non-transactional DDL.
INFO [alembic.migration] Running upgrade None -> 1bc594146bb5, initial migration

第一次遷移實際上相當(dāng)于調(diào)用db.create_all(),但在后續(xù)遷移中,upgrade命令對表實施更新操作但不影響表中的內(nèi)容。

相關(guān)文章

  • Python+Matplotlib繪制3D圖像的示例詳解

    Python+Matplotlib繪制3D圖像的示例詳解

    這篇文章主要為大家介紹了如何使用python matplotlib繪制繪制出一系列酷炫的3D圖像,例如:3D散點圖,3D曲線圖等,感興趣的可以了解一下
    2022-04-04
  • Win8下python3.5.1安裝教程

    Win8下python3.5.1安裝教程

    這篇文章主要為大家詳細(xì)介紹了Win8下python3.5.1安裝教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 對Python中plt的畫圖函數(shù)詳解

    對Python中plt的畫圖函數(shù)詳解

    今天小編就為大家分享一篇對Python中plt的畫圖函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Django查找網(wǎng)站項目根目錄和對正則表達式的支持

    Django查找網(wǎng)站項目根目錄和對正則表達式的支持

    這篇文章主要介紹了Django查找網(wǎng)站項目根目錄和對正則表達式的支持,僅供參考,需要的朋友可以參考下
    2015-07-07
  • Python中shutil模塊的學(xué)習(xí)筆記教程

    Python中shutil模塊的學(xué)習(xí)筆記教程

    shutil模塊是一種高層次的文件操作工具,類似于高級API,主要強大之處在于其對文件的復(fù)制與刪除操作更是比較支持好。下面這篇文章主要介紹了Python中shutil模塊的相關(guān)教程,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-04-04
  • 詳解model.train()和model.eval()兩種模式的原理與用法

    詳解model.train()和model.eval()兩種模式的原理與用法

    這篇文章主要介紹了詳解model.train()和model.eval()兩種模式的原理與用法,相信很多沒有經(jīng)驗的人對此束手無策,那么看完這篇文章一定會對你有所幫助
    2023-03-03
  • python實現(xiàn)發(fā)送form-data數(shù)據(jù)的方法詳解

    python實現(xiàn)發(fā)送form-data數(shù)據(jù)的方法詳解

    這篇文章主要介紹了python實現(xiàn)發(fā)送form-data數(shù)據(jù)的方法,結(jié)合實例形式分析了Python發(fā)送form-data數(shù)據(jù)的相關(guān)操作步驟、實現(xiàn)方法與注意事項,需要的朋友可以參考下
    2019-09-09
  • python文件目錄操作之os模塊

    python文件目錄操作之os模塊

    這篇文章主要介紹了python文件目錄操作之os模塊,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • appium+python adb常用命令分享

    appium+python adb常用命令分享

    這篇文章主要介紹了appium+python adb常用命令分享,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 使用TensorFlow創(chuàng)建生成式對抗網(wǎng)絡(luò)GAN案例

    使用TensorFlow創(chuàng)建生成式對抗網(wǎng)絡(luò)GAN案例

    這篇文章主要為大家介紹了使用TensorFlow創(chuàng)建生成式對抗網(wǎng)絡(luò)GAN案例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03

最新評論