database - orm框架是什么 - 为什么orm




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

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


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

当然。

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

  • 对象部分是你用你的编程语言(在这种情况下是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框架将允许您自动将数据映射到数据库记录并编写如下所示的内容:

   emp = Employee("Ryan")

   orm.save( emp )

并将该员工插入数据库。

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


介绍

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

一个ORM库是一个完全普通的库,用你选择的语言编写,封装了操作数据所需的代码,所以你不再使用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库更灵活,因为:

  • 它符合你自然的编码方式(这是你的语言!)。
  • 它抽象了DB系统,所以你可以随时改变它。
  • 该模型与应用程序的其他部分相关性很弱,因此您可以更改它或在其他任何地方使用它。
  • 它可以让你像使用数据继承一样使用OOP优点,而不会感到头疼。

但是ORM可能是一种痛苦:

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

如何了解ORM?

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

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

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

不要试图编写自己的ORM,除非你正在尝试学习某些东西。 这是一件巨大的工作,旧的工作在他们变得可靠之前花了很多时间和工作。



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

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

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

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


像所有首字母缩写词一样,它是模糊的,但我认为它们的意思是对象 - 关系映射器 - 一种掩盖你的眼睛并且相信没有下面的SQL的方式,而是它的全部对象;-)。 当然不是真的,也不是没有问题 - 总是多彩的Jeff Atwood将ORM描述为CS的越南 ;-)。 但是,如果你知道很少或没有SQL,并且有一个非常简单/小规模的问题,他们可以节省你的时间!)


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





language-agnostic