最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

現(xiàn)在我們可以使用Flask-Migrate插件來(lái)解決之,F(xiàn)lask-Migrate插件是基于Alembic,Alembic是由大名鼎鼎的SQLAlchemy作者開(kāi)發(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ù)庫(kù)
隨著開(kāi)發(fā)進(jìn)度不斷向前,你會(huì)發(fā)現(xiàn)你的數(shù)據(jù)庫(kù)模型需要更改,而當(dāng)這種情況發(fā)生時(shí)需要更新數(shù)據(jù)庫(kù)。

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

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

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

4. 創(chuàng)建遷移倉(cāng)庫(kù)

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

(venv) $ pip install flask-migrate

下面展示擴(kuò)展如何初始化:

from flask.ext.migrate import Migrate, MigrateCommand 

# ...

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

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

在數(shù)據(jù)庫(kù)遷移可以維護(hù)之前,必須通過(guò)init子命令來(lái)創(chuàng)建一個(gè)遷移庫(kù):

(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.

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

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

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

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

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

警告:自動(dòng)遷移并不總是準(zhǔn)確的,可以忽略一些細(xì)節(jié)。所以應(yīng)該經(jīng)常審查一下自動(dòng)生成的遷移腳本。
migrate子命令創(chuàng)建自動(dò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)在可以運(yùn)行g(shù)it checkout 5c來(lái)切換到這個(gè)版本的應(yīng)用程序。注意,你不需要為這個(gè)應(yīng)用生成migrations,所有的遷移腳本都包含在版本庫(kù)中。
6. 更新數(shù)據(jù)庫(kù)

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

(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

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

相關(guān)文章

  • 基于Python編寫(xiě)監(jiān)控視頻存儲(chǔ)計(jì)算器

    基于Python編寫(xiě)監(jiān)控視頻存儲(chǔ)計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了如何基于Python編寫(xiě)一個(gè)監(jiān)控視頻存儲(chǔ)計(jì)算器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • Python實(shí)現(xiàn)圖片背景移除工具

    Python實(shí)現(xiàn)圖片背景移除工具

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Python語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的圖片背景移除工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-02-02
  • Python xlrd excel文件操作代碼實(shí)例

    Python xlrd excel文件操作代碼實(shí)例

    這篇文章主要介紹了Python xlrd excel文件操作代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • PyCharm中關(guān)于安裝第三方包的三個(gè)建議

    PyCharm中關(guān)于安裝第三方包的三個(gè)建議

    這篇文章主要介紹了PyCharm中關(guān)于安裝第三方包的三個(gè)建議,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Pandas檢測(cè)None和Nan的實(shí)現(xiàn)方式

    Pandas檢測(cè)None和Nan的實(shí)現(xiàn)方式

    文章總結(jié):Pandas中None(空值)和NaN(非數(shù))需區(qū)分檢測(cè),isnull/isna用于識(shí)別缺失值,math.isnan檢測(cè)NaN,is運(yùn)算符或==檢測(cè)None,兩者概念不同,需根據(jù)場(chǎng)景選擇合適方法
    2025-09-09
  • 無(wú)法找到VS?Code?Python解釋器的幾種解決辦法

    無(wú)法找到VS?Code?Python解釋器的幾種解決辦法

    這篇文章主要介紹了無(wú)法找到VS?Code?Python解釋器的幾種解決辦法,文中介紹了三種方法,并對(duì)比Python3.12.5與3.9.6版本的優(yōu)劣,需要的朋友可以參考下
    2025-05-05
  • Python動(dòng)態(tài)語(yǔ)言與鴨子類型詳解

    Python動(dòng)態(tài)語(yǔ)言與鴨子類型詳解

    這篇文章主要介紹了Python動(dòng)態(tài)語(yǔ)言與鴨子類型詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python+Selenium+PIL+Tesseract自動(dòng)識(shí)別驗(yàn)證碼進(jìn)行一鍵登錄

    Python+Selenium+PIL+Tesseract自動(dòng)識(shí)別驗(yàn)證碼進(jìn)行一鍵登錄

    本篇文章主要介紹了Python+Selenium+PIL+Tesseract自動(dòng)識(shí)別驗(yàn)證碼進(jìn)行一鍵登錄,具有一定的參考價(jià)值,有興趣的可以了解下
    2017-09-09
  • django開(kāi)發(fā)教程之利用緩存文件進(jìn)行頁(yè)面緩存的方法

    django開(kāi)發(fā)教程之利用緩存文件進(jìn)行頁(yè)面緩存的方法

    緩存相信對(duì)各位程序員們來(lái)說(shuō)都不陌生,下面這篇文章主要給大家介紹了關(guān)于django開(kāi)發(fā)教程之利用緩存文件進(jìn)行頁(yè)面緩存的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Python單體模式的幾種常見(jiàn)實(shí)現(xiàn)方法詳解

    Python單體模式的幾種常見(jiàn)實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了Python單體模式的幾種常見(jiàn)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Python單體模式的實(shí)現(xiàn)方法、原理與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-07-07

最新評(píng)論

克什克腾旗| 嵩明县| 吉木萨尔县| 启东市| 仁寿县| 仁布县| 富民县| 扎兰屯市| 龙泉市| 鱼台县| 吴旗县| 那坡县| 金门县| 竹山县| 民县| 丁青县| 肥乡县| 云和县| 西峡县| 蕉岭县| 禄丰县| 谷城县| 德安县| 上栗县| 上饶县| 汝阳县| 新竹市| 伊宁县| 仁布县| 龙游县| 芦溪县| 白沙| 当涂县| 深泽县| 淄博市| 新宾| 阳曲县| 涟源市| 兴化市| 卫辉市| 瓮安县|