sqlalchemy


SQLAlchemy join subqueries 範例


子查詢(subquery)是使用 SQL 查詢經常會使用的技巧之一,不過各家 ORM(Object-relational mapping) 並沒有共通的實作標準,因此 subquery 的使用方法不一定會相同,這大概是使用 ORM 所必須面對的問題。

本篇紀錄 SQLAlchemy 中如何使用 subquery 以及 subquery 的 JOIN 範例。

SQLAlchemy pre-ping 機制


Connection Pool 是資料庫連線管理的機制,用來節省資料庫連線的成本,達到較高的資源利用效益。 Connection Pool 會事先與資料庫一次建立多個連線(connection),並維持住這些連線,每當應用程式(Application)需要操作資料庫時,就會從 Connection Pool 中提供(checkout)連線給應用程式使用。

但是資料庫連線也有斷線的可能,那麼要如何確保從 Connection Pool 取得的連線是可用的呢?

其中一種確定連線可用的機制就是 Pre-ping 。

本文就來談談 Pre-ping 與 SQLAlchemy 的 Pre-ping 如何設定。

淺談 SQLAlchemy Relationship Lazy Loading


SQLAlchemy ORM(Object-Relational Mapping)利用 relationship() 將多個 Model 關聯在一起,讓我們直接用存取屬性方式,直接就能夠使用被關聯的 model ,使用起來十分方便。

但是 SQLAlchemy ORM 的 relationship() 預設使用一種稱為 lazy loding 的技術,如果不了解其原理的話,很容易會有 n+1 query 的問題。

本文將簡單地談談 SQLAlchemy relationship()

SQLAlchemy - 用 Mixin / Custom Base Classes 撰寫好維護的 ORM


越是使用 SQLAlchemy 就會越是發現 SQLAlchemy 在 Python ORM 的用心,例如 Mixin and Custom Base Classes 讓我們能夠將常見的資料庫欄位或者功能放在一起,變成 Mixin 類別(class) ,只要繼承該 Mixin 就能夠獲得相同的欄位與功能,減少重複的程式並提高可維護性( Djano 的 view 也有類似的作法,詳見 Using mixins with class-based views )。