COSCUP 2023

使用Python ORM實現資料庫存取和版本控制的實作
2023-07-29, 10:40–11:10 (Asia/Taipei), TR 511
Language: Traditional Chinese (Taiwan)

在這次分享中,我將介紹如何使用Python的ORM進行資料庫存取和DB Schema版本控制的實作。ORM是一種讓我們可以以物件導向的方式操作資料庫的技術,省去直接撰寫SQL查詢語句的麻煩。

首先,我將重點介紹Python中的SQLAlchemy ORM框架,它提供了一套豐富的工具,使我們能夠輕鬆地建立資料模型、執行查詢和進行資料庫遷移等操作。

接下來,我將深入探討資料庫存取的不同情境。我將解釋如何建立資料模型類別,並將其映射到資料庫表格。我們將討論查詢、新增、更新和刪除資料的方法,以及處理複雜的查詢操作,如聯結和聚合。

除了資料庫存取,我還會討論DB Schema版本控制的實作。我將以III DevOps開源專案的實際案例來示範如何使用ORM和Alembic來進行資料庫模型的版本升級。這將確保用戶端的資料庫能自動且安全地完成升級程序,以確保與應用程式版本的一致性。

最後,我們將進行實作示範,展示如何使用Python ORM進行資料庫存取和版本控制。這些示範將讓您體驗到ORM的優勢,並幫助您思考如何在自己的專案中應用這項技術。

這個分享將提供實用的知識和技巧,適合資料庫開發人員、Python開發人員,以及對資料庫存取和版本控制有興趣的人參加。讓我們一起探索使用Python ORM進行資料庫存取和版本控制的實作!


本文介紹了Python的SQLAlchemy ORM和Alembic工具。首先,講解了SQLAlchemy作為Python中最著名和廣泛使用的ORM套件,並介紹了基於Flask的ORM套件Flask-SQLAlchemy,它在Web開發中提供了更方便的功能。

接下來,討論了ORM如何解決實際開發中的問題。使用ORM可以解決在不同數據庫之間切換時需要重新編寫相應的SQL語句的問題,同時可以簡化資料庫操作,提高可讀性和可維護性。然而,面對複雜的資料表關聯結構時,ORM可能會導致程式的可讀性下降,不易維護。為解決這個問題,可以將常用的程式邏輯封裝成通用函式,以提高代碼的重用性。

此外,詳細介紹了如何通過ORM與資料庫進行溝通,包括數據的創建、讀取、更新和刪除等操作,提高開發人員與資料庫之間的互動效率。

接著,討論了ORM的優點和缺點。ORM的優點包括提供安全性,簡化SQL語句,並具有通用性,可以減少在資料庫遷移時需要修改程式的情況。然而,ORM也存在一些缺點,如效能較低、學習曲線較高以及處理複雜查詢的能力較弱。為了解決這些缺點,可以進行效能優化、提供完善的學習資源和在需要時直接使用原生的SQL語句。

隨後,介紹了Alembic工具解決了實際開發中的問題。Alembic用於數據庫遷移和版本控制,能夠管理專案中數據庫結構的變化。為了解決版本號過多和效率問題,可以設定一個版本中繼點,並將中繼點之前的版本進行壓縮,以便更好地維護和管理。

最後會以將III Devops案例與Python Flask專案結合做為結尾,展示了如何使用ORM 建立數據庫和利用Alembic版本控制 的專案實作


Difficulty

Skilled

Target Audience

開發者, 普羅大眾, python網頁後端開發者

我是財團法人資訊工業策進會(資策會)的後端工程師,專精於使用Python進行開發工作。目前,我主要負責 III DevOps 開源專案的後端團隊工作。

我擁有豐富的使用Docker、Kubernetes等微服務開發架構的經驗,並熟練應用CI/CD工具。作為後端團隊的負責人,除了參與產品開發,我也在CI/CD工具整合方面提供了寶貴的建議,並將其實現為 III DevOps 平台產品的API自動回歸測試功能。例如黑箱掃描工具WebInspect和OWASP,白箱掃描工具SonarQube和Checkmarx,以及整合測試工具Postman和映像掃描工具Sbom等。

此外,我致力於研究如何有效運用後端技術來控制Kubernetes,以實現DevOps平台中多個團隊共享單一Cluster,並保持彼此獨立的開發測試環境。同時,我也專注於研究如何在保證效率的前提下,讓各個專案的Pipeline能夠與後端程式的升級相配合,並自動修改相應的Pipeline YAML檔以實現自動升級。

我對軟體開發技術的創新和團隊合作充滿熱情,並樂於分享Python在後端開發中的實踐方法和解決方案。作為後端工程師,我致力於推動團隊的成長,並提供高品質的技術解決方案。