Python 經常使用的ORM框架簡介

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

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

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

優勢:數據庫

採用了易懂的ActiveRecord 模式 session

一個相對較小的代碼庫 app

缺點:框架

方法和類的命名遵循了Java 的小駝峯風格 函數

不支持數據庫session隔離工做單元 學習

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

優勢:

清爽輕量的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 都限定了一個數據庫鏈接。可是,這種類型的限制其實是好事, 由於這樣強制你絞盡腦汁去想在多個數據庫之間的交互, 從而使得數據庫交互代碼很容易調試

相關文章
相關標籤/搜索