适用于Python的iBATIS?
在我目前的工作中,我们通过Java使用iBATIS对数据库进行CRUD。我喜欢该工具的抽象品质,尤其是在使用旧数据库时,因为它不会对我们施加自己的语法。
我正在寻找该库的Python类似物,因为该网站仅提供Java / .NET / Ruby版本。如果不需要,我不需要切换到Jython。
是否还有其他类似Python的iBATIS功能的项目?
解决方案
回答
也许SQLAlchemy SQL Expression支持是合适的。请参阅文档。
回答
iBatis将XML DML(或者SQL的定义)隔离在XML文件中。它特别着重于SQL与其他地方定义的某些对象模型之间的映射。
SQL Alchemy可以做到这一点-但这并不是一个非常完整的解决方案。像iBatis一样,我们只能拥有SQL表定义以及表和Python类定义之间的映射。
更完整的是有一个类定义,它也是SQL数据库定义。如果类定义生成了SQL Table DDL以及查询和处理DML,那么它就更加完整了。
我在SQLAlchemy和Django ORM之间切换。 SQLAlchemy可以类似iBatis的方式使用。但是我更喜欢使对象设计成为中心,而使SQL实现由工具集从对象派生。
我将SQLAlchemy用于大型,批处理,独立项目。数据库负载,模式转换,DW报告等都可以很好地完成。在这些项目中,重点是数据的关系视图,而不是对象模型。例如,生成的SQL可以移入PL / SQL存储过程。
我将Django用于Web应用程序,并利用其内置的ORM功能。我们只需做一些工作,就可以将Django ORM与其他Django环境隔离开来。我们可以提供全局设置,以将应用程序绑定到特定的数据库,而无需使用单独的设置模块。
Django包含许多可以管理SQL实现的公共关系(外键,多对多,一对一)。它为连接的数据库生成键和索引定义。
如果问题在很大程度上是面向对象的,并且数据库用于持久化,那么Django几乎透明的ORM层将具有优势。
如果问题在很大程度上与关系有关,则使用SQL处理中心,那么在SQLAlchemy中查看生成的SQL的功能将具有优势。