用于 Python 的 iBATIS?

Posted

技术标签:

【中文标题】用于 Python 的 iBATIS?【英文标题】:iBATIS for Python? 【发布时间】:2008-09-16 22:05:58 【问题描述】:

在我目前的演出中,我们通过 Java 使用 iBATIS 对我们的数据库进行 CRUD。我喜欢该工具的抽象特性,尤其是在使用遗留数据库时,因为它不会强加自己的语法。

我正在寻找这个库的 Python 模拟,因为该网站只有 Java/.NET/Ruby 版本可用。如果不需要,我不想切换到 Jython。

还有其他类似 iBATIS 功能的 Python 项目吗?

【问题讨论】:

【参考方案1】:

iBatis 将 SQL DML(或 SQL 的定义)隔离在 XML 文件中。它特别关注 SQL 和其他地方定义的某些对象模型之间的映射。

SQL Alchemy 可以做到这一点——但这并不是一个非常完整的解决方案。与 iBatis 一样,您只能拥有 SQL 表定义以及表和 Python 类定义之间的映射。

更完整的是拥有一个也是 SQL 数据库定义的类定义。如果类定义生成 SQL 表 DDL 以及查询和处理 DML,那就更完整了。

我在 SQLAlchemy 和 Django ORM 之间切换。 SQLAlchemy 可以以类似 iBatis 的方式使用。但我更喜欢让对象设计成为中心,让 SQL 实现由工具集从对象派生。

我将 SQLAlchemy 用于大型、批量、独立的项目。数据库加载、模式转换、DW 报告等运行良好。在这些项目中,重点是数据的关系视图,而不是对象模型。例如,生成的 SQL 可以移动到 PL/SQL 存储过程中。

我将 Django 用于 Web 应用程序,利用其内置的 ORM 功能。您可以通过一些工作将 Django ORM 与 Django 环境的其余部分隔离开来。您可以provide global settings 将您的应用绑定到特定数据库,而无需使用单独的设置模块。

Django 包含许多常见的关系(外键、多对多、一对一),它可以为其管理 SQL 实现。它为附加的数据库生成键和索引定义。

如果您的问题主要是面向对象的,并且数据库用于持久化,那么 Django 几乎透明的 ORM 层具有优势。

如果您的问题主要是关系问题,使用 SQL 处理中心,那么在 SQLAlchemy 中查看生成的 SQL 的能力具有优势。

【讨论】:

【参考方案2】:

也许 SQLAlchemy SQL 表达式支持是合适的。请参阅documentation。

【讨论】:

以上是关于用于 Python 的 iBATIS?的主要内容,如果未能解决你的问题,请参考以下文章

ibatis语法

ibatis 入门

ibatis批量插入怎么做

ibatis处理日期

ibatis一对多映射报错

activiti5 为啥选择 ibatis