一、概述

面向对象编程和关系型数据库,都是目前最流行的技术,但是它们的模型是不一样的。

面向对象编程把所有实体看成对象(object),关系型数据库则是采用实体之间的关系(relation)连接数据。很早就有人提出,关系也可以用对象表达,这样的话,就能使用面向对象编程,来操作关系型数据库。

简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。

ORM 把数据库映射成对象。

  • 数据库的表(table) --> 类(class)
  • 记录(record,行数据)--> 对象(object)
  • 字段(field)--> 对象的属性(attribute)

ORM 使用对象,封装了数据库操作,因此可以不碰 SQL 语言。开发者只使用面向对象编程,与数据对象直接交互,不用关心底层数据库。

总结起来,ORM 有下面这些优点。

  • 数据模型都在一个地方定义,更容易更新和维护,也利于重用代码。
  • ORM 有现成的工具,很多功能都可以自动完成,比如数据消毒、预处理、事务等等。
  • 它迫使你使用 MVC 架构,ORM 就是天然的 Model,最终使代码更清晰。
  • 基于 ORM 的业务代码比较简单,代码量少,语义性好,容易理解。
  • 你不必编写性能不佳的 SQL。

但是,ORM 也有很突出的缺点。

  • ORM 库不是轻量级工具,需要花很多精力学习和设置。
  • 对于复杂的查询,ORM 要么是无法表达,要么是性能不如原生的 SQL。
  • ORM 抽象掉了数据库层,开发者无法了解底层的数据库操作,也无法定制一些特殊的 SQL。

二、为何使用ORM

Django模型层之ORM举例

​ 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(增、删、改、查),而一旦谈到数据的管理操作,就需要用到数据库管理软件,例如mysql、oracle、Microsoft SQL Server等。

​ 如果应用程序需要操作数据(比如将用户注册信息永久存放起来),那么我们需要在应用程序中编写原生sql语句,然后使用pymysql模块远程操作mysql数据库

​ 针对应用程序的数据操作,直接编写原生sql语句会存在两方面的问题,严重影响开发效率,如下

#1. sql语句的执行效率问题:应用开发程序员需要耗费一大部分精力去优化sql语句
#2. 数据库迁移问题:针对mysql开发的sql语句无法直接应用到oracle数据库上,一旦需要迁移数据库,便需要考虑跨平台问题

​ 为了解决上述问题,django引入了ORM的概念,ORM全称Object Relational Mapping,即对象关系映射,是在pymysql之上又进行了一层封装,对于数据的操作,我们无需再去编写原生sql,取代代之的是基于面向对象的思想去编写类、对象、调用相应的方法等,ORM会将其转换/映射成原生SQL然后交给pymysql执行

​ 基于图2所示,有了ORM框架,开发人员既不用再去考虑原生SQL的优化问题,也不用考虑数据库迁移的问题,ORM都帮我们做了优化且支持多种数据库,这极大地提升了我们的开发效率,下面就让我们来详细学习ORM的使用吧

ORM的使用之模型

​ 在django的ORM框架中,继承自django.db.models.Model的类称之为模型类,或简称模型。

​ 一个模型是关于你的数据,唯一的、决定性的信息源、它包含存储数据的基本字段和方法。

​ 通常,每个模型都映射到一个数据库表。模型中的属性对应数据库表的字段

​ 如下所示:原生SQL与ORM的模型对应关系

What is ORM ?相关推荐

  1. .net平台性能很不错的轻型ORM类Dapper(转)

    .net平台性能很不错的轻型ORM类Dapper Posted By : 蓝狐 Updated On : 2016-04-22 23:16 dapper只有一个代码文件,完全开源,你可以放在项目里的任 ...

  2. Django --ORM常用的字段和参数 多对多创建形式

    1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型 ...

  3. PetaPoco - 轻量级高性能的ORM框架(支持.NET Core)

    我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db. 而且市面上的orm框架有很多,有重量级的Entity Framework,有 ...

  4. 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查

    Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),.它当前支持M ...

  5. Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:没有了 下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置 前言 V1.x版本终于到来了.本次 ...

  6. python数据库框架_Python数据库及ORM框架对比选择

    使用Python进行MySQL的库主要有三个: Python-MySQL(更熟悉的名字可能是MySQLdb), PyMySQL SQLAlchemy. Python-MySQL: 资格最老,核心由C语 ...

  7. orm框架有哪些_java技术哪些是必学的?

    我们接触过java需要的小伙伴们都知道java是一门强大而又复杂的编程语言,现如今在互联网行业,java的身影随处可见,可能刚学习的小伙伴们会被java语言庞大的体系图吓到,不过知识毕竟是一个积累的过 ...

  8. ORM操作models一对多、多对多关系

    ORM操作 单表.一对多表操作 1 from django.db import models 2 3 4 class UserGroup(models.Model): 5 title = models ...

  9. Django ORM操作

    Django ORM操作 一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果<2> get(**kwargs): 返回与所给筛选条 ...

  10. python 之路,Day11 (下)- sqlalchemy ORM

    python 之路,Day11 - sqlalchemy ORM 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM介绍 ...

最新文章

  1. vim 基础学习之文件跳转
  2. oracle 如何终止存储过程的运行
  3. HTML+CSS+JS实现 ❤️canvas圆形水波进度条动画特效❤️
  4. 酱油和gbt酱油哪个好_酱油越贵越好?认准瓶身这4处,轻松挑到好酱油!
  5. jquery animate自定义动画
  6. 证监会:对贾跃亭、杨丽杰采取终身证券市场禁入措施
  7. jsp给前端注入值失败_基于 qiankun 的微前端最佳实践(图文并茂) 应用间通信篇...
  8. JS:The Definitive Guide JavaScript 和 XML
  9. Python之字符串正则匹配
  10. ListView原理分析之重要方法介绍
  11. 计算机二级 office 英语,计算机二级office题库及答案
  12. IKBC poker 2更换WIN键与ALT键(option键与command键)
  13. 中国PET瓶坯注塑系统行业应用态势与投资前景预测报告(2022-2028年)
  14. 游戏辅助,python制作王者荣耀刷金币脚本!
  15. 计算机应用高级教程,计算机应用高级教程(本科)
  16. win10使用共享文件夹传输数据提示输入网络凭据问题
  17. 金蝶K3 WISE BOM多级展开_BOM成本表
  18. 原创 METTLER TOLEDO托利多Bplus 条码格式设置教程(scale manager)
  19. Linux pip安装与使用
  20. l流程图平行四边形_流程图里的形状符号的代表意义

热门文章

  1. hashcode相等的两个对象一定相等吗_为什么重写 equals方法时一定要重写hashCode方法?...
  2. wkwebview 文件服务器,WKWebView 加载沙盒图片和音视频文件失败
  3. android版本更新提示安装失败,android4.4.2系统更新后总是安装失败
  4. java工单自动化流程控件,一种工单审批的自动化处理方法及系统与流程
  5. 计算机二级能学到知识吗,2017年关于计算机二级msoffice学习知识点
  6. 结构 win32_COM编程攻略(十五 持久化与结构化存储)
  7. python手动绘图_建筑师为什么要会python编程?
  8. Linux中which命令作用,【每天一个Linux命令】12. Linux中which命令的用法
  9. 皮一皮:直男最后的倔强...
  10. 微信突然更新,新增了这些功能...