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初探(一)的更多相关文章

  1. Asp.net Core 系列之--2.ORM初探:Dapper实现MySql数据库各类操作

    ChuanGoing 2019-09-10 距离上一篇近一个月时间,断断续续才把本篇码完,后面将加快进度,争取年度内把本系列基本介绍完成,同时督促本人持续学习. 本篇学习曲线: 1.初识Dapper ...

  2. Asp.net Core 系列之--3.领域、仓储、服务简单实现

    ChuanGoing 2019-11-11  距离上篇近两个月时间,一方面时因为其他事情耽搁,另一方面也是之前准备不足,关于领域驱动有几个地方没有想通透,也就没有继续码字.目前网络包括园子里大多领域驱 ...

  3. 轻量级ORM框架初探-Dapper与PetaPoco的基本使用

    一.EntityFramework EF是传统的ORM框架,也是一个比较重量级的ORM框架.这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择. 1.1 准备一张数据库 ...

  4. php里ezpdo orm框架初探

    http://jackyrong.iteye.com/blog/238930 http://www.oschina.net/project/tag/126/orm?sort=view&lang ...

  5. 【hibernate 初探】之 关系映射,ORM

    从整理上讲,一个ORM框架(以hibernate为例)所涉及内容无非就是,如何映射,如何检索,还有事务处理.所以从这三方面入手,基本上可以保证将hibernate可以用到自己的项目之中.所以我先说一下 ...

  6. C# 通过反射初探ORM框架的实现原理

    背景: 以前学的Java进行开发,多用到Mybatis,Hiberante等ORM框架,最近需要上手一个C#的项目,由于不是特别难,也不想再去学习C#的ORM框架,所以就想着用反射简单的实现一下ORM ...

  7. hibernate课程 初探单表映射1-2 ORM定义

    1 什么是ORM? ORM(Object / RelationShip Mapping) 对象/关系映射 面向对象编程(OOP)最终要把对象信息保存在关系性数据库中,要写好多sql语句.这与面向对象编 ...

  8. Daject初探 - 一个开源关系型数据库对象关系映射(ORM)模型

    Daject简介 Daject是用php写的一个关系型数据库抽象模型,通过该模型,可以在不写任何SQL或写很少的SQL就能执行大多数数据库查询操作.Daject具有面向对象,跨数据库的优点,通过数据库 ...

  9. Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用

    一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...

随机推荐

  1. Android6.0 源码修改之Settings音量调节界面增加通话音量调节

    前言 今天客户提了个需求,因为我们的设备在正常情况下无法调节通话音量,只有在打电话过程中,按物理音量加减键才能出现调节通话音量seekBar,很不方便,于是乎需求就来了.需要优化两个地方 1.在正常情 ...

  2. 学习ELK之----01.建立ELK测试项目

    1. 建立一个4G内存的虚拟机,安装Linux系统(具体的版本以能运行Docker为准,我用的是Ubuntu-Server) 2. 安装Docker 3. 下载elk容器:# docker pull ...

  3. getopt与getopt_long

    如何通过命令行,为程序传入参数,可以使用函数getopt与getopt_long. 函数的声明如下: #include <unistd.h> int getopt(int argc, ch ...

  4. netdom join 错误:指定的域不存在,或无法联系。

    环境: 域控制器:feiquan.com  IP:192.168.1.132 客户端:\\win-quan IP:192.168.1.129(动态) 域控制器可以和客户端ping通,但客户端加入域时就 ...

  5. 织梦dedecms如何修改关键词的字数长度限制

    亲测,这个教程比较完善,百度了很多有些少步骤,或者方法根本不对,导致不成功.这个方法我亲子测试了.奏效. 首先登陆数据库后台,如phpmyadmin,找到相应的数据表dede_archives和ded ...

  6. MIP 2016年终总结

    MIP 项目组成立至今已经有一年多的时间,在过去的一年里,感谢各位的关注. 1. MIP JS 迭代 MIP JS 运行环境是 MIP 页面和 MIP 组件运行的基石.在 2016 年 4 月,MIP ...

  7. 客户端和服务端(C#) 时间戳的生成和转换

    C# DateTime与时间戳的相互转换,包括JavaScript时间戳和Unix的时间戳. 1. 什么是时间戳 首先要清楚JavaScript与Unix的时间戳的区别: JavaScript时间戳: ...

  8. php原生代码实现explode函数功能

    在开始代码前要先介绍几个PHP函数: explode()   把字符串打散成数组 strpos()     返回字符串在另一个字符串第一次出现的位置(对大小写敏感) strstr()       查找 ...

  9. PHP全栈学习笔记17

    phpmyadmin教程 管理页进入phpmyadmin 打开C:\wamp\apps\phpmyadmin3.5.1下的配置文件:config.inc 修改密码 创建与修改数据库.数据表 字段类型 ...

  10. 源码安装Nginx加TCP反向代理模块

    说明: 安装方式是源码编译安装,因此先安装相关依赖,否则报错. yum -y install gcc* patch openssl openssl-devel 安装步骤: 下载nginx源码包: wg ...