什么是ORM,我可以在哪里了解更多信息?

有人build议我使用ORM作为我正在devise的一个项目,但是我很难find关于它是什么或它是如何工作的信息。 任何人都可以给我一个简短的解释或链接,我可以在哪里了解更多?

介绍

对象关系映射 ( Object-Relational Mapping ,ORM)是一种技术,可以使用面向对象的范例从数据库查询和操作数据。 在谈论ORM时,大多数人都指的是实现对象关系映射技术的库,因此也就是“一个ORM”这个短语。

一个ORM库是一个完全普通的库,用你select的语言编写,封装了操作数据所需的代码,所以你不再使用SQL; 您可以直接与使用相同语言的对象进行交互。

例如,这是一个伪语言的完全虚构的例子:

你有一本书课,你要检索作者是“Linus”的所有书籍。 手动,你会做这样的事情:

book_list = new List(); sql = "SELECT book FROM library WHERE author = 'Linus'"; data = query(sql); // I over simplify ... while (row = data.next()) { book = new Book(); book.setAuthor(row.get('author'); book_list.add(book); } 

使用ORM库,它看起来像这样:

 book_list = BookTable.query(author="Linus"); 

机械部分通过ORM库自动处理。

优点和缺点

使用ORM可节省大量时间,因为:

  • DRY :你只在一个地方写数据模型,更新,维护和重用代码更容易。
  • 很多东西是自动完成的,从数据库处理到I18N。
  • 它迫使你编写MVC代码,最终使你的代码变得更简洁。
  • 您不必编写糟糕的SQL(大多数Web程序员真的很喜欢它,因为SQL被视为“子”语言,实际上它是一个非常强大和复杂的语言)。
  • 消毒; 使用准备好的语句或事务就像调用方法一样简单。

使用ORM库更灵活,因为:

  • 它符合你自然的编码方式(这是你的语言!)。
  • 它抽象出数据库系统,所以你可以随时改变它。
  • 该模型与应用程序的其他部分很弱,所以你可以改变它或在其他地方使用它。
  • 它使您可以像使用数据inheritance一样使用OOP善良,而不会感到头疼。

但是,ORM可能是一个痛苦:

  • 你必须学习它,而ORM库不是轻量级的工具;
  • 你必须设置它。 同样的问题。
  • 对于通常的查询来说性能是可以的,但是对于大型项目来说,SQL master总是会用自己的SQL做的更好。
  • 它提取数据库。 如果你知道幕后发生了什么事情,那么这是一个好消息,这对新编程人员来说是一个陷阱,可以写出非常贪婪的陈述,就像for循环中的重击一样。

如何了解ORM?

那么用一个。 无论你select哪个ORM库,它们都使用相同的原则。 这里有很多的ORM库:

  • Java: Hibernate 。
  • PHP: Propel或Doctrine (我更喜欢最后一个)。
  • Python:Django的ORM或SQLAlchemy (我最喜欢的ORM库)。

如果你想在Web编程中尝试一个ORM库,最好使用如下的整个框架堆栈:

  • Symfony (PHP,使用Propel或Doctrine)。
  • Django (Python,使用内部的ORM)。

不要试图写自己的ORM,除非你正在学习一些东西。 这是一项巨大的工作,旧的工作在可靠之前花费了大量的时间和精力。

任何人都可以给我一个简短的解释…

当然。

ORM代表“Object to Relational Mapping”,其中

  • 对象部分是你用你的编程语言(在这种情况下是Python)

  • 关系部分是一个关系数据库pipe理系统(一个数据库)有其他types的数据库,但最stream行的是关系型(你知道表,列,pk fk等,例如Oracle MySQL,MS-SQL)

  • 最后, 映射部分是您在对象和表格之间build立桥梁的地方。

在不使用ORM框架的应用程序中,您可以手动执行此操作。 使用ORM框架将允许您减less创build解决scheme所需的样板。

所以,假设你有这个对象。

  class Employee: def __init__( self, name ): self.__name = name def getName( self ): return self.__name #etc. 

和桌子

  create table employee( name varcar(10), -- etc ) 

使用ORM框架将允许您自动映射该对象与数据库logging,并写如下所示:

  emp = Employee("Ryan") orm.save( emp ) 

并将该员工插入数据库。

哎呀,这不是那么简短,但我希望它很简单,抓住你读的其他文章。

ORM(对象关系映射器)是帮助将代码对象映射到数据库的一个软件部分。

有些人比其他人处理更多的方面…但是目的是从开发人员的肩膀上减less数据层的一些重量。

以下是Martin Fowler(Data Mapper)的简短剪辑:

企业应用架构数据映射器的模式

Hibernate的第一章Java Persistence with Hibernate(第三版)对一般的ORM概念有一个很好的概述,并讨论了ORM的动机和devise。 强烈build议,即使你不使用Java。

对于那些使用python的人来说Storm是一个不错的select。

这是一个巨大的话题。 拿起一本好的hibernate的书,它应该详细解释ORM的详细信息,然后才能得到基本的hibernate资料。

https://www.hibernate.org/

就像所有的缩略词一样,它是模棱两可的,但是我认为它们是指对象关系映射器 ( object-relational mapper) – 一种掩盖你的眼睛并且相信没有下面的SQL的方法,而是所有的对象;-)。 当然不是真的,也不是没有问题 – 总是多彩的Jeff Atwood把ORM描述为CS的越南 ;-)。 但是,如果你知道很less或没有SQL,并有一个非常简单/小规模的问题,他们可以节省你的时间!

DALMP http://code.google.com/p/dalmp/可能是一个很好的php / mysql目前支持许多caching后端像redis / memcache / apc

对象模型涉及以下三个概念:数据抽象封装inheritance关系模型使用关系或表的基本概念。 对象关系映射(OR映射)产品将对象编程语言function与关系数据库集成在一起。