ORM初探(一)
Object Relational Mapping(ORM):
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
ORM在业务逻辑层和数据库层之间充当了桥梁的作用。
ORM的优势:
- ORM解决的主要问题是对象和关系的映射。它通常将一个类和一张表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。
- ORM提供了对数据库的映射,不用直接编写SQL代码,只需操作对象就能对数据库操作数据。
- 让软件开发人员专注于业务逻辑的处理,提高了开发效率。
ORM的劣势:
- ORM的缺点是会在一定程度上牺牲程序的执行效率。
- ORM的操作是有限的,也就是ORM定义好的操作是可以完成的,一些复杂的查询操作是完成不了。
- ORM用多了SQL语句便会淡忘了,关于数据库相关技能也就淡淡退化了。
Django项目中使用mysql数据库:
1、创建Django项目:

创建好项目后生成如下目录结构:先简单认识几个文件。

2、ORM只能操作数据库中的表,不能操作数据库,所以我们需要到mysql数据库中手动创建数据库orm_practice。

3、创建好数据库后到Django项目中的设置文件中设置连接数据库,默认配置如下:

我们重新修改配置文件,修改后的配置看起来像下面这个样子:

4、在orm_practice项目下的同名文件夹下找到__init__.py文件引用pymysql模块,告诉Django使用该模块操作数据库。
import pymysql pymysql.install_as_MySQLdb()

5、到app目录下的models.py中创建出版社Publishing,书籍Books,作者Author三张表,models.py中的每个类就是一张表,类中的属性对应表的字段。
表的结构:一个出版社可以出版多本书,一本书可以由多个作者共同编写,同时一个作者也可以写多本书。最终表的关系如下所示:
from django.db import models # Create your models here.
class Publishing(models.Model):
pid = models.AutoField(primary_key=True)
name = models.CharField(max_length=30) class Books(models.Model):
bid = models.AutoField(primary_key=True)
name = models.CharField(max_length=30)
pid = models.ForeignKey("Publishing",on_delete=models.CASCADE) class Author(models.Model):
aid = models.AutoField(primary_key=True)
name = models.CharField(max_length=30)
books = models.ManyToManyField("Books")
models.py

6、创建表后(也就是在models.py中的类),需要到终端中执行两条命令。
python37 manage.py makemigrations # 生成迁移文件
python37 manage.py migrate # 执行数据迁移


7、使用pycharm带的mysql插件查看数据库结构,首先添加数据库管理器:

选择mysql后会弹出如下配置对话框:

配置成功后,使用mysql管理器对数据库进行操作。

如果觉得图形界面不习惯,也可以使用mysql命令行进行操作,这里主要对app_author、app_author_books、app_books、app_publishing这几张表进行操作。
8、向表app_author、app_author_books、app_books、app_publishing添加数据
8.1出版社表app_publishing中添加字段信息。

8.2书籍表app_books添加字段信息。

8.3作者表app_author添加字段:

8.4在书籍和作者关系表中app_author_books添加字段

到此建表完成。
我们在models.py中其实只创建了三个类Publishing、Books、Author,正常来说也就是创建三张表,但是这里生成了四张表多一个app_author_books,这张表是由作者表中多对多关系Django为我们自动创建的。

#############################################################################################
好了这里先停一下,下节来看一下ORM中的常用字段
#############################################################################################
ORM初探(一)的更多相关文章
- Asp.net Core 系列之--2.ORM初探:Dapper实现MySql数据库各类操作
ChuanGoing 2019-09-10 距离上一篇近一个月时间,断断续续才把本篇码完,后面将加快进度,争取年度内把本系列基本介绍完成,同时督促本人持续学习. 本篇学习曲线: 1.初识Dapper ...
- Asp.net Core 系列之--3.领域、仓储、服务简单实现
ChuanGoing 2019-11-11 距离上篇近两个月时间,一方面时因为其他事情耽搁,另一方面也是之前准备不足,关于领域驱动有几个地方没有想通透,也就没有继续码字.目前网络包括园子里大多领域驱 ...
- 轻量级ORM框架初探-Dapper与PetaPoco的基本使用
一.EntityFramework EF是传统的ORM框架,也是一个比较重量级的ORM框架.这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择. 1.1 准备一张数据库 ...
- php里ezpdo orm框架初探
http://jackyrong.iteye.com/blog/238930 http://www.oschina.net/project/tag/126/orm?sort=view&lang ...
- 【hibernate 初探】之 关系映射,ORM
从整理上讲,一个ORM框架(以hibernate为例)所涉及内容无非就是,如何映射,如何检索,还有事务处理.所以从这三方面入手,基本上可以保证将hibernate可以用到自己的项目之中.所以我先说一下 ...
- C# 通过反射初探ORM框架的实现原理
背景: 以前学的Java进行开发,多用到Mybatis,Hiberante等ORM框架,最近需要上手一个C#的项目,由于不是特别难,也不想再去学习C#的ORM框架,所以就想着用反射简单的实现一下ORM ...
- hibernate课程 初探单表映射1-2 ORM定义
1 什么是ORM? ORM(Object / RelationShip Mapping) 对象/关系映射 面向对象编程(OOP)最终要把对象信息保存在关系性数据库中,要写好多sql语句.这与面向对象编 ...
- Daject初探 - 一个开源关系型数据库对象关系映射(ORM)模型
Daject简介 Daject是用php写的一个关系型数据库抽象模型,通过该模型,可以在不写任何SQL或写很少的SQL就能执行大多数数据库查询操作.Daject具有面向对象,跨数据库的优点,通过数据库 ...
- Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用
一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...
随机推荐
- 《SQL CookBook 》笔记-第二章-查询结果排序
目录 第二章 查询结果排序 2.1 以指定顺序返回查询结果 2.2 依据子串排序 2.3 排序时对 Null 值的处理 2.4 依据条件逻辑动态调整排序项 第二章 shanzm 第二章 查询结果排序 ...
- 自学python的日记分享
2019.4.22登记 课堂笔记 2019.4.8 在windows环境下,用python写出第一个程序“hello world” print("Hello World!!!") ...
- Elasticsearch的基本概念和指标
背景 在13年的时候,我开始负责整个公司的搜索引擎.嗯……,不是很牛的那种大项目负责人.而是整个搜索就我一个人做.哈哈. 后来跳槽之后,所经历的团队都用Elasticsearch,基本上和缓存一样,是 ...
- 学习ASP.NET Core Razor 编程系列十一——把新字段更新到数据库
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- 微信小程序开发02-小程序基本介绍
前言 前面我们研究了下微信小程序的执行流程,因为拿不到源码,只能算我们的猜想,我们需要更加了解小程序还需要做具体的项目,于是我们将原来那套还算复杂的业务拿出来: [组件化开发]前端进阶篇之如何编写可维 ...
- Dalvik 虚拟机操作码
Dalvik 虚拟机操作码 表中的vx.vy.vz表示某个Dalvik寄存器.根据不同指令可以访问16.256或64K寄存器. 表中lit4.lit8.lit16.lit32.lit64表示字面值(直 ...
- 【面试】我是如何在面试别人Spring事务时“套路”对方的
“中国最好面试官” 自从上次写了一篇“[面试]我是如何面试别人List相关知识的,深度有点长文”的文章后,有读者专门加我微信,说我是“中国最好面试官”,这个我可受不起呀. 我只是希望把面试当作是一次交 ...
- 4.5管道实现机制和模拟构建管道「深入浅出ASP.NET Core系列」
希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. 管道实现机制 要了解管道的实现机制,我们必须要深入框架的源码,幸亏微软开源了,我们可以访问GitHub的地址来下载 ...
- jQuery(二)、选择器
1.#id 根据给定的ID匹配一个元素,如果选择器中包含特殊字符,可以用双斜杆(\\) 转义 如: 查找ID 为 myDiv[bar] 的元素 HTML 代码: <div id="no ...
- 【Redis】redis各类型数据存储分析
一.简介和应用 Redis是一个由ANSI C语言编写,性能优秀.支持网络.可持久化的K-K内存数据库,并提供多种语言的API.它常用的类型主要是 String.List.Hash.Set.ZSet ...