2008-09-16 67 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