什麽是 Pony ORM
ORM 是“object-relational-mapper”的首字母縮寫。ORM 框架允許工程師以對象的形式來操作數據庫中的內容。關系型數據庫的內容是一條一條的存儲在一個個的表裏面的。然而,當使用一種高級的、面向對象的編程語言時,如果從數據庫中取回的數據也是以對象的形式,那將是一個極大的遍歷。Pony ORM 就是一個 Python 的編程庫,讓你能夠放方便的以對象的形式操作數據庫中一行行的數據。
目前已有其他很流行的映射方案的實現,例如 Django 和 SQLAlchemy,但是 Pony 在有些方面有明顯的優勢。
- 數據庫查詢時的一個方便的例外語法
- 自動的數據庫查詢優化
- 優雅的解決 N+1 問題
- 圖形化的數據庫編輯器
跟 Django 相較,Pony 還支持:
- IdentityMap 模式
- 自動的事務管理
- 自動的查詢結果緩存
- 全面支持 composite keys
- 更方便的書寫 LEFT JOIN,HAVING 等多個 SQL 特色功能
Pony 有個有趣的特色能讓你使用 Python 中生成器的表達式來跟數據庫交互。這個方法能讓熟悉 Python 語法的程序員,即使對數據庫不甚了解,也可以輕松編寫數據庫查詢語句。下面就是一個這種查詢的例子:
select(c for c in Customer if sum(c.orders.total_price) > 1000)
在這個查詢中,我們想要取回所有總消費大於1000的客戶。select
是 Pony ORM 提供的一個函數,這個函數接受一個描述了數據庫查詢目的的生成器作為參數。通常,生成器會在 python 中解釋執行,但是當它作為 select
函數的參數的時候,會自動被翻譯為 SQL 語句,然後在數據庫中被執行。Customer
是一程序啟動時就創建的跟數據表結構對應的一個類型。
不是所有的 ORM 都提供這種方便的查詢語法。Pony 既增加了易用性,也保證數據操作的效率。查詢語句被轉為快速高效的 SQL 語句。基於 DBMS ,對於不同的數據庫,生成的 SQL 語句可能是不同的。無論對於哪種數據庫,Python 代碼將是相同的,保證了應用的可移植性。
Pony 讓所有程序員,即使不是 SQL 專家,也能編寫覆雜高效的查詢語句。同時,Pony 也不“仇視” SQL —— 如果有人需要編寫純 SQL ,例如去調用預定的程序,他也可以通過 Pony 輕松實現。Pony 的宗旨是簡化 Web 應用的開發,Pony 的典型應用就是創建動態網頁。
可以通過email: team (at) ponyorm.com 聯系到 Pony ORM 的團隊。