ORM
一、什么是ORM
ORM
是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是
当今企业级应用开发环境中的主流开发方法,关系型数据库是企业级应用环境中永久存放数据的主流数据存储系统。
对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。
因此,ORM
系统一般以中间件的形式存在,主要实现程序对象到关系型数据库数据的映射。ORM
与数据库的对应关系如图5.2所示。
二、认知 ORM
对象关系映射(Object Relational Mapping,ORM)是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
面向对象是在软件工程的基本原则(如耦合、聚合、封装)基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配问题,ORM技术应运而生。
三、数据库和对象的映射关系
- 数据表(table)----> 类(class)
- 数据行(record,也称为记录)----> 对象(object)
- 字段(field)----> 对象的属性(attribute)
举个例子:
下面是SQL
语句:
sql = 'select * from books order by price'
cursor.execute(sql)
data = cursor.fetchall()
写成ORM
data = Book.query.all()
四、优缺点
.优势
第一:隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。
第二:ORM使我们构造固化数据结构变得简单易行。在ORM年表的史前时代,我们需要将我们的对象模型转化为一条一条的SQL语句,通过直连或是DB helper在关系数据库构造我们的数据库体系。而现在,基本上所有的ORM框架都提供了通过对象模型构造关系数据库结构的功能。这,相当不错。
缺点
第一:无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。
第二:面向对象的查询语言(X-QL)作为一种数据库与对象之间的过渡,虽然隐藏了数据层面的业务抽象,但并不能完全的屏蔽掉数据库层的设计,并且无疑将增加学习成本.
第三:对于复杂查询,ORM仍然力不从心。虽然可以实现,但是不值的。视图可以解决大部分calculated column,case ,group,having,order by, exists,但是查询条件(a and b and not c and (d or d))。
五、常用的 ORM 库
Python中提供了非常多的ORM
库,一些ORM
库是框架特有的,还有一些是通用的第三方包。虽然每个ORM
库的应用领域稍有不同,但是它们操作数据库的理论原理是相同的。
下面列举了一下常用的Python ORM
框架。
Django ORM
:Django
是一个免费、开源的应用程序框架,它的ORM是框架内置的。由于Django
的ORM
和框架本身结合太紧密了,所以不推荐脱离Django框架使用它。SQLAlchemy
:一个成熟的ORM
框架,资源和文档都非常丰富,大多数Python Web框架对其都有很好的支持,能够胜任大多数应用场合。Peewee
:一个轻量级的ORM
。Peewee
基于SQLAlchemy
内核开发,整个框架由一个文件构成。Peewee
更关注极简主义,具备简单的API以及容易理解和使用的函数库。Storm
:一个中型的ORM
库。它允许开发者跨数据库构建复杂的查询语句,从而支持动态地存储或检索信息。
MVC
什么是MVC
MVC 模式(Model–view–controller)是软件工程中的一种软件架构模式,它把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
MVC 模式的目的是实现一种动态的程序设计,简化后续对程序的修改和扩展,并且使程序某一部分的重复利用成为可能。除此之外,MVC 模式通过对复杂度的简化,使程序的结构更加直观。软件系统在分离了自身的基本部分的同时,也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长进行相关的分组:
- 模型(Model):程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能);
- 控制器(Controller):负责转发请求,对请求进行处理;
- 视图(View):界面设计人员进行图形界面设计。
MVC模式中三个组件的详细介绍如下:
模型(Model):用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“Model”有对数据直接访问的权力,例如对数据库的访问。“Model”不依赖“View”和“Controller”,也就是说, Model 不关心它会被如何显示或是如何被操作。但是 Model 中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此 Model 的 View 必须事先在此 Model 上注册,由此,View 可以了解在数据 Model 上发生的改变。(比如:观察者模式(软件设计模式));
视图(View):能够实现数据有目的的显示(理论上,这不是必需的)。在 View 中一般没有程序上的逻辑。为了实现 View 上的刷新功能,View 需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册;
控制器(Controller):起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据 Model 上的改变。
从MVC模式的一般理解来看,视图层与模型层是存在直接联系的,并且模型层的变化会通过视图层反映出来,这确实是MVC模式的标准理解,不过在我目前接触到的实际应用中,更多的情况时,视图层与模型层是通过控制层联系起来的,两者之间并无直接的联系,三者之间的关系更类似下图所示:
模板引擎
了解模板引擎:模板引擎(用于Web开发)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。