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:提到无状态特性 ...
随机推荐
- [ArcGIS API for JavaScript 4.8] Sample Code-Get Started-layers简介
[官方文档:https://developers.arcgis.com/javascript/latest/sample-code/intro-layers/index.html] 一.Intro t ...
- 记一次DDOS攻击防御实录
前言 笔者所在单位是一家小型创业公司,目前产品正在成长阶段,日活跃用户只有区区几万人次,并发只有日均 85/QPS,自建机房,带宽 100MB.在这样的背景下,完全没想过一个小产品会招来黑客的 ...
- Cocos Creator—如何给资源打MD5版本号
Cocos Creator 是Cocos最新一代的游戏开发者工具,基于 Cocos2d-x,组件化,脚本化,数据驱动,跨平台发布.Cocos Creator的开发思路已经逐步跟Unity 3D靠拢,写 ...
- 超好用的C#控制台应用模板
本文是Wei的公众号投稿文章: 默认模板之缺 在工作学习中,我们经常需要创建一些简单的控制台应用(Console App)去验证某个想法,或者作为小工具交付给其他同事. 通常我们的选择是 Visual ...
- ReactNative之参照具体示例来看RN中的FlexBox布局
今天是重阳节,祝大家节日快乐,今天继续更新RN相关的博客.上篇博客<ReactNative之从HelloWorld中看环境搭建.组件封装.Props及State>中我们通过一个HelloW ...
- spring boot 2.0 集成 shiro 和 pac4j cas单点登录
新开的项目,果断使用 spring boot 最新版本 2.0.3 ,免得后期升级坑太多,前期把雷先排了. 由于对 shiro 比较熟,故使用 shiro 来做权限控制.同时已经存在了 cas ...
- Java核心技术第四章——3.对象构造
重载: 如果多个方法(包含构造方法)有相同的名字.不同的参数,便产生重载.编译器必须挑选出具体执行哪个方法,它通过用各个方法给出的参数类型与特定方法调用所使用的值类型进行匹配挑选出相对应的方法. 如果 ...
- java集合常见面试题
1. Array和ArrayList的区别,什么时候更合适用Array a) Array是数组,可以容纳基本类型和对象,而ArrayList是集合,只能容纳对象 b) Array是 ...
- IDEA同步上传lua代码,方便开发。
因项目是Java和lua一起开发的,以前用Notepad++插件连接,每次关掉得重新寻找目录.有点耗时间,所以用idea提供的工具很是便利,再此做个笔记. 点击上面的绿色”+“号,添加 在配置mapp ...
- nginx 报错502Bad Gateway
场景: 目前在ECS中起了多个node服务,使用forever进程守护,最近,打开线上页面发现报错502 Bad Gateway;同时部分静态资源访问不到.(之前可以的): 解决: 首先查看nginx ...