ORM框架整理

浅谈ORM:

  ORM大家心里都明白是对象关系映射操作数据库,也都知道怎么去应用,但是如果让你说说他的原理和执行过程,你还能描述出来么?当然,让我说我也说不明确!所以就花了点时间,彻底的理解了下ORM框架,以下是学习心得体会!

在简述ORM框架之前,需要先明确两个点:DB first 和 code first 
  DB first - 手动创建数据库和表,通过框架,自动生成类 直接获取数据库的表,自动生成一大堆代码! 例子:原生SQL语句
  code first - 手动创建数据库和类,通过ORM框架,自动生成表(需要手动创建数据库)  例子:ORM框架

ORM框架简介

  对象-关系映射(Object-Relational Mapping,简称ORM),面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。

为什么使用ORM?

  当我们实现一个应用程序时(不使用O/R Mapping),我们可能会写特别多的原生数据库操作代码,以完成从数据库中保存、删除、读取对象信息的操作,论性能来说,肯定是原生SQL语句的执行是毋庸置疑的;但是不刨除一部分人写的原生SQL语句很烂执行效率不高;

  再一种就是复杂的操作,需要写很多的重复代码,直接暴露一大难题:原生SQL语句拼接起来非常麻烦;而对象关系映射(Object Relational Mapping,简称ORM),主要实现程序对象到关系数据库数据的映射,通过类或对象操作数据库,大大减少重复性的代码。所以就有了这么一种数据库操作框架,不用再写SQL语句而是自动生成,所以就不用再去操作数据库,通过学习这个框架的规则,实现是数据库操作。所以ORM框架相当于中间起连接作用的一个桥梁,开发成员按照规则编写语句,框架内部会按照编写的内容自动生成SQL语句,然后去操作MySQL数据库。

  ORM框架的作用,就两点:1、为用户提供简单的规则;2、代码在内部自动转换成SQL语句

对象-关系映射解释:

  A . 简单:ORM以最基本的形式建模数据。比如ORM会将一个类(模型)映射成MySQL的一张表,定义的类内的字段就是这张表的列名(自上而下有序的生成列) 
  B . 精确:ORM使所有的自定义的类都按照统一的标准精确地映射成MySQL数据表,使系统在代码层面保持准确统一 
  C .易懂:ORM使数据库结构文档化。通过Python代码就能实现对数据库的操作,不用再去写原生的SQL语句,也不用再考虑执行效率的问题!
  D.易用:ORM包含对持久类对象进行CRUD操作的API,例如create(), update(), save(), load(), find(), find_all(), where()等,也就是将sql查询全部封装成了编程语言中的函数,通过函数的链式组合生成最终的SQL语句。通过这种封装避免了不规范、冗余、风格不统一的SQL语句,可以避免很多人为Bug,方便编码风格的统一和后期维护。 
这里写图片描述

总结:

ORM框架:

  对象关系映射,通过创建一个类,这个类与数据库的表相对应!类的对象代指数据库中的一行数据。

简述ORM原理:
  让用户不再写SQL语句,而是通过类以及对象的方式,和其内部提供的方法,进行数据库操作!把用户输入的类或对象转换成SQL语句,转换之后通过pymysql执行完成数据库的操作。

ORM的优缺点:

优点: 
  提高开发效率,降低开发成本 
  使开发更加对象化 
  可移植 
  可以很方便地引入数据缓存之类的附加功能 
缺点: 
  在处理多表联查、where条件复杂之类的查询时,ORM的语法会变得复杂。就需要写入原生SQL。

示例

  由于本人是一位Python搬砖工,现所熟悉语言仅Python而已,现以Python的ORM举例!!!

  SQLAlchemy是python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。

执行过程:  

  通过引擎(Engine)连上要操作的数据库(什么数据库?MySQL,SQLserver,MySQLDB等...),然后利用创建的类(必须继承Base基类,否则无用!)自动创建数据表,类内定义的字段对应着数据表的列,类的对象对应着数据表的一行数据。SQLAlchemy内部没有连接数据库的机制,他只负责数据的转换,而连接数据库的操作是由pymysql实现的。同时SQLAlchemy可以转换成多个数据库的语言,所以建立链接时,需要通过引擎(Engine)指定操作的数据库类型,以转换成相应的语句!

 

借鉴于:

http://blog.csdn.net/jianyuerensheng/article/details/50804360

http://www.cnblogs.com/wisdo/p/4279091.html

posted @ 2017-08-06 15:05  细雨蓝枫  阅读(417)  评论(0编辑  收藏  举报