What is ORM ?
一、概述
面向对象编程和关系型数据库,都是目前最流行的技术,但是它们的模型是不一样的。
面向对象编程把所有实体看成对象(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 ?相关推荐
- .net平台性能很不错的轻型ORM类Dapper(转)
.net平台性能很不错的轻型ORM类Dapper Posted By : 蓝狐 Updated On : 2016-04-22 23:16 dapper只有一个代码文件,完全开源,你可以放在项目里的任 ...
- Django --ORM常用的字段和参数 多对多创建形式
1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型 ...
- PetaPoco - 轻量级高性能的ORM框架(支持.NET Core)
我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db. 而且市面上的orm框架有很多,有重量级的Entity Framework,有 ...
- 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查
Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),.它当前支持M ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:没有了 下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置 前言 V1.x版本终于到来了.本次 ...
- python数据库框架_Python数据库及ORM框架对比选择
使用Python进行MySQL的库主要有三个: Python-MySQL(更熟悉的名字可能是MySQLdb), PyMySQL SQLAlchemy. Python-MySQL: 资格最老,核心由C语 ...
- orm框架有哪些_java技术哪些是必学的?
我们接触过java需要的小伙伴们都知道java是一门强大而又复杂的编程语言,现如今在互联网行业,java的身影随处可见,可能刚学习的小伙伴们会被java语言庞大的体系图吓到,不过知识毕竟是一个积累的过 ...
- ORM操作models一对多、多对多关系
ORM操作 单表.一对多表操作 1 from django.db import models 2 3 4 class UserGroup(models.Model): 5 title = models ...
- Django ORM操作
Django ORM操作 一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果<2> get(**kwargs): 返回与所给筛选条 ...
- python 之路,Day11 (下)- sqlalchemy ORM
python 之路,Day11 - sqlalchemy ORM 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM介绍 ...
最新文章
- vim 基础学习之文件跳转
- oracle 如何终止存储过程的运行
- HTML+CSS+JS实现 ❤️canvas圆形水波进度条动画特效❤️
- 酱油和gbt酱油哪个好_酱油越贵越好?认准瓶身这4处,轻松挑到好酱油!
- jquery animate自定义动画
- 证监会:对贾跃亭、杨丽杰采取终身证券市场禁入措施
- jsp给前端注入值失败_基于 qiankun 的微前端最佳实践(图文并茂) 应用间通信篇...
- JS:The Definitive Guide JavaScript 和 XML
- Python之字符串正则匹配
- ListView原理分析之重要方法介绍
- 计算机二级 office 英语,计算机二级office题库及答案
- IKBC poker 2更换WIN键与ALT键(option键与command键)
- 中国PET瓶坯注塑系统行业应用态势与投资前景预测报告(2022-2028年)
- 游戏辅助,python制作王者荣耀刷金币脚本!
- 计算机应用高级教程,计算机应用高级教程(本科)
- win10使用共享文件夹传输数据提示输入网络凭据问题
- 金蝶K3 WISE BOM多级展开_BOM成本表
- 原创 METTLER TOLEDO托利多Bplus 条码格式设置教程(scale manager)
- Linux pip安装与使用
- l流程图平行四边形_流程图里的形状符号的代表意义
热门文章
- hashcode相等的两个对象一定相等吗_为什么重写 equals方法时一定要重写hashCode方法?...
- wkwebview 文件服务器,WKWebView 加载沙盒图片和音视频文件失败
- android版本更新提示安装失败,android4.4.2系统更新后总是安装失败
- java工单自动化流程控件,一种工单审批的自动化处理方法及系统与流程
- 计算机二级能学到知识吗,2017年关于计算机二级msoffice学习知识点
- 结构 win32_COM编程攻略(十五 持久化与结构化存储)
- python手动绘图_建筑师为什么要会python编程?
- Linux中which命令作用,【每天一个Linux命令】12. Linux中which命令的用法
- 皮一皮:直男最后的倔强...
- 微信突然更新,新增了这些功能...