2008-09-16 34 views
4

在我目前的演出中,我們通過Java使用iBATIS來CRUD數據庫。我喜歡該工具的抽象特性,特別是在處理遺留數據庫時,因爲它不會對您施加自己的語法。iBATIS for Python?

我在找這個庫的Python模擬器,因爲該網站只有Java/.NET/Ruby版本可用。如果我不需要,我不想切換到Jython。

是否還有其他類似Python的iBATIS功能的項目?

回答

10

iBatis的螯合的SQL DML(或SQL的定義)在XML文件中。它特別關注SQL與其他地方定義的一些對象模型之間的映射。

SQL Alchemy可以做到這一點 - 但它並不是一個非常完整的解決方案。像iBatis一樣,您可以只擁有SQL表定義以及表和Python類定義之間的映射。

什麼是更完整的是有一個類的定義是的SQL數據庫定義。如果類定義生成SQL表DDL以及查詢和處理DML,那就更加完整。

我在SQLAlchemy和Django ORM之間的觸發器。 SQLAlchemy可以以類似於iBatis的方式使用。但我更喜歡將對象設計放在中心位置,並讓SQL實現從工具集的對象中派生出來。

我使用SQLAlchemy進行大型批處理獨立項目。數據庫加載,模式轉換,數據倉庫報告等工作得很好。在這些項目中,重點是數據的關係視圖,而不是對象模型。例如,生成的SQL可能會轉移到PL/SQL存儲過程中。

我使用Django的Web應用程序,利用其內置的ORM功能。您可以通過一些工作將Django ORM與Django其餘環境隔離開來。您可以provide global settings將您的應用綁定到特定的數據庫,而無需使用單獨的設置模塊。

Django包含了一些常見的關係(外鍵,多到許多人,一對之一),它可以管理SQL實現。它爲附加的數據庫生成密鑰和索引定義。

如果您的問題主要是面向對象的,與正被用於持久性的數據庫,然後Django的的幾乎透明的ORM層具有優勢。

如果您的問題在很大程度上關係,與SQL處理中心,然後看看在SQLAlchemy中生成的SQL的能力方面具有優勢。

1

也許SQLAlchemy SQL Expression支持是合適的。請參閱documentation