1. 程式人生 > >Python ORM框架簡介

Python ORM框架簡介

ORM概念

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

Python中常用的ORM

SQLObject

SQLObject是一種流行的物件關係管理器,用於為資料庫提供物件介面,其中表為類,行為例項,列為屬性。

SQLObject包含一個基於Python物件的查詢語言,使SQL更抽象,併為應用程式提供了大量的資料庫獨立性。

優點:

  1. 採用了易懂的ActiveRecord 模式 

  2. 一個相對較小的程式碼庫 

缺點:

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

  2. 不支援資料庫session隔離工作單元 

Storm

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

優點:

  1. 清爽輕量的API,短學習曲線和長期可維護性
  2. 不需要特殊的類建構函式,也沒有必要的基類

缺點:

  1. 迫使程式設計師手工寫表格建立的DDL語句,而不是從模型類自動派生
  2. Storm的貢獻者必須把他們的貢獻的版權給Canonical公司

Django's ORM 

因為Django的ORM 是緊嵌到web框架的,所以就算可以也不推薦,在一個獨立的非Django的Python專案中使用它的ORM。

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

優點:

  1. 易用,學習曲線短 

  2. 和Django緊密集合,用Django時使用約定俗成的方法去操作資料庫 

缺點:

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

  2. 緊密和Django整合,使得在Django環境外很難使用 

peewee:

優點:

  1. Django式的API,使其易用 

  2. 輕量實現,很容易和任意web框架整合 

缺點:

  1. 不支援自動化 schema 遷移 

  2. 多對多查詢寫起來不直觀 

SQLAlchemy:

SQLAlchemy 採用了資料對映模式,其工作單元 主要使得 有必要限制所有的資料庫操作程式碼到一個特定的資料庫session,在該session中控制每個物件的生命週期 。

優點:

  1. 企業級 API,使得程式碼有健壯性和適應性 

  2. 靈活的設計,使得能輕鬆寫複雜查詢 

缺點:

  1. 工作單元概念不常見 

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

總結

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