sqlalchemy

SQLAlchemy join subqueries 範例

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

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

Posted on  Mar 11, 2020  in  Python 模組/套件推薦  by  Amo Chen  ‐ 2 min read

SQLAlchemy 強制清空所有資料表(tables)

在產品開發時,有時候會有將所有的資料表進行清空的需求,如果是用 SQLAlchemy 清空單一資料表也很簡單,但如果在多個資料表都有用到 FOREIGN KEY 就很容易遇到 IntegrityError ,原因在於如果有其他紀錄(record)關聯到程式正在刪除的紀錄(record)時,就會導致那些紀錄違反 FOREIGN KEY Constraint 無法刪除成功。

本篇記錄如何忽視 FOREIGN KEY Constraint 強制刪除所有資料表。

Posted on  Aug 4, 2019  in  Python 模組/套件推薦  by  Amo Chen  ‐ 2 min read

SQLAlchemy pre-ping 機制

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

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

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

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

Posted on  Jun 5, 2019  in  Python 模組/套件推薦  by  Amo Chen  ‐ 2 min read

淺談 SQLAlchemy Relationship Lazy Loading

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

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

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

Posted on  Jun 1, 2019  in  Python 模組/套件推薦  by  Amo Chen  ‐ 3 min read

SQLAlchemy ORM IN / NOT IN 範例

SQLAlchemy 是 Python 生態系中相當成熟的 ORM(Object Relational Mapper) 套件,不過也因為支援相當多功能,所以經常要翻閱文件查詢 SQL 中相應的功能要如何撰寫。

本篇紀錄如何使用 SQLAlchemy 撰寫含有 INNOT IN 語句的 ORM.

Posted on  Mar 24, 2019  in  Python 模組/套件推薦  by  Amo Chen  ‐ 2 min read

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 )。

Posted on  Dec 8, 2018  in  Python 模組/套件推薦  by  Amo Chen  ‐ 1 min read