食之无味的ORM

来源:互联网 发布:罗德曼数据统计 编辑:程序博客网 时间:2024/04/27 21:25

对于mysql/mongo/redis这样的数据库,无论是通过命令行交互,还是客户端软件,其实都是将数据操作命令传递给数据服务器,并拿到返回的格式化数据。这些操作都是基于链接的。


ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法,把数据库表的一行记录与一个对象互相做自动转换。(类与table,实例与行)


想起了django自带的orm框架。其实很多框架都有自己的ORM,使用对象模型来兼容并屏蔽底层各种数据库的细节。除了框架自带,也有一些第三方软件。


SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。SQLAlchemy 的一个目标是提供能兼容众多数据库(如 SQLite、MySQL、Postgres、Oracle、MS-SQL、SQLServer 和 Firebird)的企业级持久性模型。SQLAlchemy首次发行于2006年2月,并迅速地在Python社区中最广泛使用的ORM工具之一,不亚于Django的ORM框架。看来只是为了屏蔽难懂的sql,对于mongo/redis这种并没啥用处。从使用这两种db的客户端的体验来说,已经可以把ORM甩一边了。


很多的程序员开始使用ORM,不用写SQL的喜悦让他们激动不已,可是好景不长,他们很快发现众多的烦恼一个接一个的出现了:

首先从观感上讲,业务逻辑开始不清晰直观了。

无可避免的,自动化意味着映射和关联管理,代价是牺牲性能。

 面向对象的查询语言(X-QL)作为一种数据库与对象之间的过渡,虽然隐藏了数据层面的业务抽象,但并不能完全的屏蔽掉数据库层的设计,并且无疑将增加学习成本.


ORM使我们摆脱了SQL,但并不代表我们不再使用SQL。事实上,复杂的查询和报表我仍然推荐使用SQL。ORM自身也是基于链接(session),甚至django的ORM竟然依赖于mysql客户端软件。我们可以使用ORM也可以使用基于链接的sql。

0 0
原创粉丝点击