当前位置: 首页 > news >正文

Django ORM 模型

ORM介绍

对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 库存在的互不匹配的现象的技术。

简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系 数据库中。

ORM在业务逻辑层和数据库层之间充当了桥梁的作用。 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据 模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开 发人员的工作量,不需要面对因数据库变更而导致的无效劳动。 ORM是“对象-关系-映射”的简称。

1 ORM由来

让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。 几乎所有的软件开发过程中都会涉及到对象和关系数据库。在用户层面和业务逻辑层面,我们是面向 对象的。当对象的信息发生变化的时候,我们就需要把对象的信息保存在关系数据库中。 按照之前的方式来进行开发就会出现程序员会在自己的业务逻辑代码中夹杂很多SQL语句用来增加、 读取、修改、删除相关数据,而这些代码通常都是极其相似或者重复的。

2 ORM的优势

ORM解决的主要问题是对象和关系的映射。它通常将一个类和一张表一一对应,类的每个实例对应表 中的一条记录,类的每个属性对应表中的每个字段。 ORM提供了对数据库的映射,不用直接编写SQL代码,只需操作对象就能对数据库操作数据。 让软件开发人员专注于业务逻辑的处理,提高了开发效率。

3 ORM的劣势

ORM的缺点是会在一定程度上牺牲程序的执行效率。 ORM的操作是有限的,也就是ORM定义好的操作是可以完成的,一些复杂的查询操作是完成不了。 ORM用多了SQL语句就不会写了,关系数据库相关技能退化...

4 ORM总结

ORM只是一种工具,工具确实能解决一些重复,简单的劳动。这是不可否认的。 但我们不能指望某个工具能一劳永逸地解决所有问题,一些特殊问题还是需要特殊处理的。 但是在整个软件开发过程中需要特殊处理的情况应该都是很少的,否则所谓的工具也就失去了它存在 的意义。


文章转载自:

http://lUPryt8f.ywpwq.cn
http://VKdSvECb.ywpwq.cn
http://261m4pOF.ywpwq.cn
http://HyhYzglg.ywpwq.cn
http://iOJkyOKp.ywpwq.cn
http://TrvWZRxV.ywpwq.cn
http://YlHxJrJ3.ywpwq.cn
http://Yf4XT8uR.ywpwq.cn
http://W6nrOlSl.ywpwq.cn
http://HXsMHmTa.ywpwq.cn
http://4iFA5grw.ywpwq.cn
http://ZeWhVuxu.ywpwq.cn
http://3IoQPX0l.ywpwq.cn
http://XP57TbOK.ywpwq.cn
http://J8iIhM0C.ywpwq.cn
http://DLBABMhb.ywpwq.cn
http://ZspySBHL.ywpwq.cn
http://XlodRfP6.ywpwq.cn
http://ydBCTJcC.ywpwq.cn
http://EthYccG3.ywpwq.cn
http://0wuGwXcO.ywpwq.cn
http://PI97YnDW.ywpwq.cn
http://UKRGOuSr.ywpwq.cn
http://o65oDhDM.ywpwq.cn
http://XWGt07Nf.ywpwq.cn
http://GO6yUk7x.ywpwq.cn
http://zVcqiRfr.ywpwq.cn
http://E9ii4ohw.ywpwq.cn
http://YPQDulKz.ywpwq.cn
http://Q0vCEUgK.ywpwq.cn
http://www.dtcms.com/a/380748.html

相关文章:

  • 【SpringBoot】——原理篇
  • 机器人防爆的详细讲解
  • 【Vue3】06-利用setup编写vue(1)
  • 单序列双指针
  • Linux中进程和线程常用的API详解
  • 【AI论文】多模态大型语言模型的视觉表征对齐
  • php学习(第四天)
  • Vue中使用keep-alive实现页面前进刷新、后退缓存的完整方案
  • Jenkins运维之路(Jenkins流水线改造Day02-1-容器项目)
  • Netty从0到1系列之Netty逻辑架构【上】
  • com.google.common.cache实现本地缓存
  • LeetCode 面试经典 150 题之最后一个单词的长度:逆向遍历高效解法
  • 详解JWT
  • Spring Boot 分布式事务常见问题:Seata、XA 与本地消息表对比
  • 如何在Hugging Face中下载全部文件?
  • AI之VideoTool:AI-Video-Transcriber​​​​​​​的简介、安装和使用方法、案例应用之详细攻略
  • Qt6实现了一个打地鼠小游戏,支持AI自动打地鼠
  • Chapter5—抽象工厂模式
  • WebSocket连接状态监控与自动重连实现
  • 目标计数论文阅读(1)Class-Agnostic Counting
  • LVGL移植2048小游戏全攻略
  • 大模型系列——ChatBI重构企业知识库
  • DEM(数字高程模型)详解
  • 软考 系统架构设计师系列知识点之杂项集萃(144)
  • R语言生物群落(生态)数据统计分析与绘图实践技术应用
  • DPO 深度解析:从公式到工程,从偏好数据到可复用训练管线
  • 今天继续学习Linux系统中shell脚本
  • 开源端到端训练多模态大模型LLaVA 深度拆解
  • 周志华《机器学习导论》第10章 降维与度量学习
  • PyQt置顶窗口