有人建议我在我正在设计的项目中使用ORM,但我很难找到关于它是什么或它如何工作的信息。
谁能给我简单解释一下什么是ORM,它是如何工作的,以及我应该如何开始使用ORM ?
有人建议我在我正在设计的项目中使用ORM,但我很难找到关于它是什么或它如何工作的信息。
谁能给我简单解释一下什么是ORM,它是如何工作的,以及我应该如何开始使用ORM ?
当前回答
ORM(对象关系映射器)是一种帮助将代码对象映射到数据库的软件。
有些人处理的方面比其他人多……但其目的是减轻开发人员在数据层的负担。
以下是Martin Fowler(数据制图师)的一段简短视频:
企业应用程序体系结构数据映射器的模式
其他回答
谁能给我一个简单的解释…
确定。
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 )
并将该员工插入数据库。
哦,它不是那么简短,但我希望它足够简单,以抓住你读过的其他文章。
像所有的首字母缩写一样,它是模棱两可的,但我认为它们的意思是对象关系映射器——一种掩盖你的眼睛并让你相信下面没有SQL的方法,而是所有的对象;-)。当然,这并不是真的,也不是没有问题——Jeff Atwood将ORM描述为CS中的越南;-)。但是,如果你几乎不懂SQL,并且有一个非常简单/小规模的问题,他们可以节省你的时间!-)
对象模型涉及以下三个概念 数据抽象 封装 继承 关系模型使用了关系或表的基本概念。 对象关系映射(OR映射)产品将对象编程语言功能与关系数据库集成在一起。
ORM(对象关系映射器)是一种帮助将代码对象映射到数据库的软件。
有些人处理的方面比其他人多……但其目的是减轻开发人员在数据层的负担。
以下是Martin Fowler(数据制图师)的一段简短视频:
企业应用程序体系结构数据映射器的模式
简介
对象-关系映射(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,除非你想学习一些东西。这是一项巨大的工作,旧的机器花费了大量的时间和精力才变得可靠。