天天看點

用 Flask 來寫個輕部落格 (8) — (M)VC_Alembic 管理資料庫結構的更新和降級目錄前文清單擴充閱讀Alembic檢視指令 manager db 的可用選項初始化 DB Migrate開始第一次跟蹤将記錄檔案應用到資料庫中(實時更新資料庫結構)復原到某一個記錄環境中

<a href="#%E7%9B%AE%E5%BD%95">目錄</a>

<a href="#%E5%89%8D%E6%96%87%E5%88%97%E8%A1%A8">前文清單</a>

<a href="#%E6%89%A9%E5%B1%95%E9%98%85%E8%AF%BB">擴充閱讀</a>

<a href="#alembic">Alembic</a>

<a href="#%E6%9F%A5%E7%9C%8B%E6%8C%87%E4%BB%A4-manager-db-%E7%9A%84%E5%8F%AF%E7%94%A8%E9%80%89%E9%A1%B9">檢視指令 manager db 的可用選項</a>

<a href="#%E5%88%9D%E5%A7%8B%E5%8C%96-db-migrate">初始化 DB Migrate</a>

<a href="#%E5%BC%80%E5%A7%8B%E7%AC%AC%E4%B8%80%E6%AC%A1%E8%B7%9F%E8%B8%AA">開始第一次跟蹤</a>

<a href="#%E5%B0%86%E8%AE%B0%E5%BD%95%E6%96%87%E4%BB%B6%E5%BA%94%E7%94%A8%E5%88%B0%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%AD%E5%AE%9E%E6%97%B6%E5%8D%87%E7%BA%A7%E6%95%B0%E6%8D%AE%E5%BA%93%E7%BB%93%E6%9E%84">将記錄檔案應用到資料庫中實時更新資料庫結構</a>

<a href="#%E5%9B%9E%E6%BB%9A%E5%88%B0%E6%9F%90%E4%B8%80%E4%B8%AA%E8%AE%B0%E5%BD%95%E7%8E%AF%E5%A2%83%E4%B8%AD">復原到某一個記錄環境中</a>

<a href="http://blog.csdn.net/jmilk/article/details/53150084">用 Flask 來寫個輕部落格 (1) — 建立項目</a>

<a href="http://blog.csdn.net/jmilk/article/details/53152158">用 Flask 來寫個輕部落格 (2) — Hello World!</a>

<a href="http://blog.csdn.net/jmilk/article/details/53153382">用 Flask 來寫個輕部落格 (3) — (M)VC_連接配接 MySQL 和 SQLAlchemy</a>

<a href="http://blog.csdn.net/jmilk/article/details/53184903">用 Flask 來寫個輕部落格 (4) — (M)VC_建立資料模型和表</a>

<a href="http://blog.csdn.net/jmilk/article/details/53187575">用 Flask 來寫個輕部落格 (5) — (M)VC_SQLAlchemy 的 CRUD 詳解</a>

<a href="http://blog.csdn.net/jmilk/article/details/53229180">用 Flask 來寫個輕部落格 (6) — (M)VC_models 的關系(one to many)</a>

<a href="http://blog.csdn.net/Jmilk/article/details/53239740">用 Flask 來寫個輕部落格 (7) — (M)VC_models 的關系(many to many)</a>

<a href="http://blog.csdn.net/jmilk/article/details/53161030">Openstack_SQLAlchemy 修改資料庫的表結構</a>

<a href="http://blog.csdn.net/jmilk/article/details/52662797">Openstack_SQLAlchemy_一對多關系表的多表插入實作</a>

大多數情況下,在開始實作一個新項目的代碼之前都是先完成資料庫的設計。但随着項目新功能的增加或需求變更,不可避免的資料模型的修改會貫穿項目開發的始終。這裡會出現一個問題:當把這些資料模型的更新從開發環境遷移到生産環境時,怎樣才能在保證原有資料完整性的情況下更新的資料庫結構或将資料庫復原到之前的某一個時刻以便複現環境。

Alembic(Database migration 資料遷移跟蹤記錄) 提供的資料庫更新和降級的功能,就可以幫我們解決上述的問題。它所能實作的效果有如 Git 管理項目代碼一般。

在這裡我們使用 Flask 的擴充 Flask-Migrate

NOTE:要在 virtualenv 的環境下安裝

生成 manager db 指令

在 manage.py 檔案中 Create a new commands: <code>manager.add_command("db", MigrateCommand)</code>

在初始化資料庫更新任務之後會建立一個 migrations 目錄,所有的更改記錄檔案(這個記錄檔案本來就是 Python 檔案)都會被儲存在該目錄下。

該指令會讓 Alembic 掃描所有的 SQLAlchemy 對象,并将沒有記錄過的行和列記錄成為一個 python 檔案并儲存到 migrations/versions 路徑下。

NOTE 1: 執行該指令的前提是 migrations/versions 目錄下必須存在記錄檔案。

NOTE 2: 而且這些記錄檔案是我們能夠手動修改和建立的,這也是實時更新資料庫結構的方法。将需要修改的資料庫結構的更新内容,手動的寫入到記錄檔案中,然後執行 <code>upgrade</code> 指令就能夠實作資料庫的更新,而且這些更新是可以批量的作用于資料庫中,不需要使用一條一條的 SQL 語句來進行修改。

用法于 Git 非常相似: