<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Python的Flask框架中使用Flask-Migrate擴展遷移數據庫的教程

        來源:懂視網 責編:小采 時間:2020-11-27 14:29:24
        文檔

        Python的Flask框架中使用Flask-Migrate擴展遷移數據庫的教程

        Python的Flask框架中使用Flask-Migrate擴展遷移數據庫的教程:我們在升級系統的時候,經常碰到需要更新服務器端數據結構等操作,之前的方式是通過手工編寫alter sql腳本處理,經常會發現遺漏,導致程序發布到服務器上后無法正常使用。 現在我們可以使用Flask-Migrate插件來解決之,Flask-Migrate插件是基于Alem
        推薦度:
        導讀Python的Flask框架中使用Flask-Migrate擴展遷移數據庫的教程:我們在升級系統的時候,經常碰到需要更新服務器端數據結構等操作,之前的方式是通過手工編寫alter sql腳本處理,經常會發現遺漏,導致程序發布到服務器上后無法正常使用。 現在我們可以使用Flask-Migrate插件來解決之,Flask-Migrate插件是基于Alem

        我們在升級系統的時候,經常碰到需要更新服務器端數據結構等操作,之前的方式是通過手工編寫alter sql腳本處理,經常會發現遺漏,導致程序發布到服務器上后無法正常使用。

        現在我們可以使用Flask-Migrate插件來解決之,Flask-Migrate插件是基于Alembic,Alembic是由大名鼎鼎的SQLAlchemy作者開發數據遷移工具。

        具體操作如下:

        1. 安裝Flask-Migrate插件

        $ pip install Flask-Migrate
        
        

        2. 修改Flask App部分的代碼,以增加Migrate相關的Command

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

        3. 初始化

        $ python app.py db init
        
        

        使用Flask-Migrate遷移數據庫
        隨著開發進度不斷向前,你會發現你的數據庫模型需要更改,而當這種情況發生時需要更新數據庫。

        Flask-SQLAlchemy只有當數據庫表不存在了才從模型創建它們,所以更新表的唯一途徑就是銷毀舊的表,當然這將導致所有數據庫中的數據丟失。

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

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

        4. 創建遷移倉庫

        首先,Flask-Migrate必須已經安裝到虛擬環境中:

        (venv) $ pip install flask-migrate
        

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

        from flask.ext.migrate import Migrate, MigrateCommand 
        
        # ...
        
        migrate = Migrate(app, db)
        manager.add_command('db', MigrateCommand)
        
        

        為了可以使用數據庫遷移命令,Flask-Migrate提供MigrateCommand類來連接Flask-Script的manager對象。在這個示例中使用db來連接到命令。

        在數據庫遷移可以維護之前,必須通過init子命令來創建一個遷移庫:

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

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

        建議:如果你有克隆在GitHub上的應用程序,你現在可以運行git checkout 5c來切換到這個版本的應用程序。

        5. 創建遷移腳本

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

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

        警告:自動遷移并不總是準確的,可以忽略一些細節。所以應該經常審查一下自動生成的遷移腳本。
        migrate子命令創建自動遷移腳本:

        (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上的應用程序,你現在可以運行git checkout 5c來切換到這個版本的應用程序。注意,你不需要為這個應用生成migrations,所有的遷移腳本都包含在版本庫中。
        6. 更新數據庫

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

        (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
        

        第一次遷移實際上相當于調用db.create_all(),但在后續遷移中,upgrade命令對表實施更新操作但不影響表中的內容。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Python的Flask框架中使用Flask-Migrate擴展遷移數據庫的教程

        Python的Flask框架中使用Flask-Migrate擴展遷移數據庫的教程:我們在升級系統的時候,經常碰到需要更新服務器端數據結構等操作,之前的方式是通過手工編寫alter sql腳本處理,經常會發現遺漏,導致程序發布到服務器上后無法正常使用。 現在我們可以使用Flask-Migrate插件來解決之,Flask-Migrate插件是基于Alem
        推薦度:
        標簽: 教程 數據庫 python
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲五月六月丁香激情| 亚洲理论电影在线观看| 丰满人妻一区二区三区免费视频| 日韩电影免费在线观看视频| 亚洲精品av无码喷奶水糖心| 免费无码又爽又刺激高潮的视频| 亚洲性无码一区二区三区| 韩国欧洲一级毛片免费| 久久精品国产亚洲av品善| 日本免费网站观看| 亚欧洲精品在线视频免费观看 | 国产精品亚洲一区二区在线观看 | 亚洲永久无码3D动漫一区| 伊人免费在线观看高清版| 久久久久亚洲AV无码专区首| 精品无码AV无码免费专区| 亚洲国产熟亚洲女视频| 免费人成激情视频| 韩日电影在线播放免费版| 亚洲白色白色在线播放| 皇色在线免费视频| 亚洲精品无码不卡| 亚洲免费综合色在线视频| 久久亚洲AV无码精品色午夜 | 亚洲免费福利视频| 亚洲影院在线观看| AV片在线观看免费| 一级毛片免费全部播放| 亚洲天堂久久精品| 日韩电影免费在线| 精品国产污污免费网站 | 亚洲av第一网站久章草| 奇米影视亚洲春色| 国产在线观看片a免费观看| 无忧传媒视频免费观看入口| 亚洲情a成黄在线观看动漫尤物| 免费看少妇作爱视频| 黄色片免费在线观看| 亚洲av成人一区二区三区观看在线 | 亚洲欧洲国产精品香蕉网| 18禁超污无遮挡无码免费网站国产 |