好文分享 — Handling Database Migrations with Alembic
Python 目前最知名的 ORM library 當屬 SQLAlchemy, 不過 SQLAlchemy 並不負責 database migration 的部分,也就是說資料庫新增/刪除什麼表格、表格新增刪除修改什麼欄位,都得由開發者自行負責。
擁有成熟的開發流程團隊都會使用工具管理 database migration 的所有歷程,就像使用版本控制一樣,在哪個版本新增資料庫新增/刪除什麼表格、表格新增刪除修改什麼欄位都會記錄下來,並且擁有自由切換版本的能力(除非有十分必要,才會切回舊版本,一般都是執行版本升級)。
database migration 工具的運作原理也很簡單,主要是每個版本都會紀錄執行什麼 SQL 指令、程式碼,以及紀錄回復到舊版本需要執行的 SQL 指令與程式碼,可以簡單理解為 upgrade, downgrade 2 個步驟。
SQLAlchemy 也有配套的 database migration 工具 — Alembic, 其英文原意為蒸餾器,拿來與原意為煉金術的 Alchemy 搭配真是再適合不過了。
Alembic 的運作原理就如同前文所述,主要是每個版本是 1 個 Python Script, 裡面記錄當前版本編號、舊版本編號,以及 upgrade()
與 downgrade()
2 個函數,執行 upgrade()
會升級到當前版本,執行 downgrade()
會降級回舊版本,只要理解這些概念,就能輕鬆上手 Alembic 這類 database migration 工具。
如果對於 Alembic 有興趣的話,可以從 “Handling Database Migrations with Alembic” 1 文開始入門。