Python 常用的ORM框架簡介


ORM概念
ORM(Object Ralational Mapping,對象關系映射)用來把對象模型表示的對象映射到基於S Q L 的關系模型數據庫結構中去。這樣,我們在具體的操作實體對象的時候,就不需要再去和復雜的 SQ L 語句打交道,只需簡單的操作實體對象的屬性和方法。O R M 技術是在對象和關系之間提供了一條橋梁,前台的對象型數據和數據庫中的關系型的數據通過這個橋梁來相互轉化  。

Python中常用的ORM
SQLObject
SQLObject是一種流行的對象關系管理器,用於為數據庫提供對象接口,其中表為類,行為實例,列為屬性。

SQLObject包含一個基於Python對象的查詢語言,使SQL更抽象,並為應用程序提供了大量的數據庫獨立性。

優點:

采用了易懂的ActiveRecord 模式 

一個相對較小的代碼庫 

缺點:

方法和類的命名遵循了Java 的小駝峰風格 

不支持數據庫session隔離工作單元 

Storm
Storm 是一個介於 單個或多個數據庫與Python之間 映射對象的 Python ORM 。為了支持動態存儲和取回對象信息,它允許開發者構建跨數據表的復雜查詢。Stom中 table class 不需要是框架特定基類 的子類 。每個table class是 的sqlobject.SQLObject 的子類。

優點:

清爽輕量的API,短學習曲線和長期可維護性
不需要特殊的類構造函數,也沒有必要的基類
缺點:

迫使程序員手工寫表格創建的DDL語句,而不是從模型類自動派生
Storm的貢獻者必須把他們的貢獻的版權給Canonical公司
Django's ORM 
因為Django的ORM 是緊嵌到web框架的,所以就算可以也不推薦,在一個獨立的非Django的Python項目中使用它的ORM。

Django,一個最流行的Python web框架, 有它獨有的 ORM。 相比 SQLAlchemy, Django 的 ORM 更吻合於直接操作SQL對象,操作暴露了簡單直接映射數據表和Python類的SQL對象 。

優點:

易用,學習曲線短 

和Django緊密集合,用Django時使用約定俗成的方法去操作數據庫 

缺點:

不好處理復雜的查詢,強制開發者回到原生SQL 

緊密和Django集成,使得在Django環境外很難使用 

peewee:
優點:

Django式的API,使其易用 

輕量實現,很容易和任意web框架集成 

缺點:

不支持自動化 schema 遷移 

多對多查詢寫起來不直觀 

SQLAlchemy:
SQLAlchemy 采用了數據映射模式,其工作單元 主要使得 有必要限制所有的數據庫操作代碼到一個特定的數據庫session,在該session中控制每個對象的生命周期 。

優點:

企業級 API,使得代碼有健壯性和適應性 

靈活的設計,使得能輕松寫復雜查詢 

缺點:

工作單元概念不常見 

重量級 API,導致長學習曲線 

總結
相比其他的ORM, SQLAlchemy 意味着,無論你何時寫SQLAlchemy代碼, 都專注於工作單元的前沿概念 。DB Session 的概念可能最初很難理解和正確使用,但是后來你會欣賞這額外的復雜性,這讓意外的時序提交相關的數據庫bug減少到0。在SQLAlchemy中處理多數據庫是棘手的, 因為每個DB session 都限定了一個數據庫連接。但是,這種類型的限制實際上是好事, 因為這樣強制你絞盡腦汁去想在多個數據庫之間的交互, 從而使得數據庫交互代碼很容易調試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM