有人建议我在我正在设计的项目中使用ORM,但我很难找到关于它是什么或它如何工作的信息。

谁能给我简单解释一下什么是ORM,它是如何工作的,以及我应该如何开始使用ORM ?


当前回答

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

其他回答

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

有些人处理的方面比其他人多……但其目的是减轻开发人员在数据层的负担。

以下是Martin Fowler(数据制图师)的一段简短视频:

企业应用程序体系结构数据映射器的模式

像所有的首字母缩写一样,它是模棱两可的,但我认为它们的意思是对象关系映射器——一种掩盖你的眼睛并让你相信下面没有SQL的方法,而是所有的对象;-)。当然,这并不是真的,也不是没有问题——Jeff Atwood将ORM描述为CS中的越南;-)。但是,如果你几乎不懂SQL,并且有一个非常简单/小规模的问题,他们可以节省你的时间!-)

谁能给我一个简单的解释…

确定。

ORM代表“对象到关系映射”,其中

Object部分是你在编程语言中使用的部分(在本例中是python) 关系部分是一个关系数据库管理系统(一个数据库),还有其他类型的数据库,但最流行的是关系(你知道表,列,pk fk等,如Oracle MySQL, MS-SQL) 最后映射部分是用来在对象和表之间架桥的。

在不使用ORM框架的应用程序中,可以手动完成此操作。使用ORM框架可以减少创建解决方案所需的样板文件。

假设你有这个物体。

 class Employee:
      def __init__( self, name ): 
          self.__name = name

       def getName( self ):
           return self.__name

       #etc.

还有桌子

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

使用ORM框架将允许您自动地将该对象映射到db记录,并编写如下内容:

   emp = Employee("Ryan")

   orm.save( emp )

并将该员工插入数据库。

哦,它不是那么简短,但我希望它足够简单,以抓住你读过的其他文章。

简介

对象-关系映射(ORM)是一种允许您使用面向对象范式查询和操作数据库中的数据的技术。当谈论ORM时,大多数人指的是实现对象关系映射技术的库,因此有了“ORM”这个短语。

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

例如,这是一个使用伪语言的完全虚构的情况:

你有一个book类,你想检索所有作者为“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: You write your data model in only one place, and it's easier to update, maintain, and reuse the code. A lot of stuff is done automatically, from database handling to I18N. It forces you to write MVC code, which, in the end, makes your code a little cleaner. You don't have to write poorly-formed SQL (most Web programmers really suck at it, because SQL is treated like a "sub" language, when in reality it's a very powerful and complex one). Sanitizing; using prepared statements or transactions are as easy as calling a method.

使用ORM库更加灵活,因为:

它符合您编码的自然方式(这是您的语言!)。 它抽象了DB系统,因此您可以随时更改它。 该模型与应用程序的其余部分是弱绑定的,因此您可以更改它或在其他任何地方使用它。 它让您可以轻松地使用数据继承等面向对象的优点。

但ORM可能会让人头疼:

你必须学会它,ORM库不是轻量级工具; 你必须建立它。同样的问题。 对于通常的查询,性能是可以的,但是对于大型项目,SQL大师总是用自己的SQL做得更好。 它抽象了DB。如果您知道幕后发生了什么,那么这样做是可以的,但对于新程序员来说,这是一个陷阱,他们可能会编写非常贪婪的语句,比如for循环中的严重攻击。

如何了解ORM?

那就用一个吧。无论您选择哪种ORM库,它们都使用相同的原则。这里有很多ORM库:

Java:冬眠。 PHP: Propel或Doctrine(我更喜欢最后一个)。 Python: Django ORM或SQLAlchemy(我最喜欢的ORM库)。 NHibernate或实体框架

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

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

不要尝试编写自己的ORM,除非你想学习一些东西。这是一项巨大的工作,旧的机器花费了大量的时间和精力才变得可靠。

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