django ORM框架 第二章 表与表的关系关联表

news2024/11/27 22:27:07

目录

一、表的几种关联关系

1.1 一对一

1、介绍:

2、举例

3、建表原则:

 4、django ORM 框架实现 一对一 的表的创建

1.2 一对多

1、介绍:

2、举例

 3、建表原则:

4、django ORM 框架实现 一对多 的表的创建

1.3 多对多

1、介绍

2、注意:

3、举例:

4、django ORM 框架实现 多对多 的表的创建


一、表的几种关联关系

表与表之间的关系分为三种,分别为:一对一、一对多、多对多

1.1 一对一

1、介绍:

一对一:a表中的一条数据,与b表中的一条数据,是一一对应的关系。

2、举例

学号表:

学号姓名
2023001张三
2023002李四
2023003王五
2023004老六

学生信息表:

学号年龄住址
202300118北京
202300219上海
202300320河北
202300419天津

学号表中的每一条数据,与学生信息表中的数据,都是一一对应的。

3、建表原则:

  • 主表的主键和从表的外键形成主外键关系,外键必须唯一,也就是说从表的外键必须是主键。

 4、django ORM 框架实现 一对一 的表的创建

如果创建的是一对一的关系,可以在任何一个模型类使用OneToOneField

1.2 一对多

1、介绍:

表a中一条数据,对应表b中的多条数据。 表b中的一条数据,只对应表a中的一条数据。

2、举例

班级和学生:一个班级可以有多个学生,一个学生只能属于一个班级。

 3、建表原则:

  • 在多的一方创建一个字段作为外键指向一的一方的主键,也就是说多的一方是从表,一的一方是主表。

4、django ORM 框架实现 一对多 的表的创建

django ORM 框架实现 一对多 的表的创建:

1、创建主表,班级表 

# 班级表
class Class(models.Model):
    class_id = models.IntegerField(primary_key=True, verbose_name='班级id', help_text='班级id')
    class_name = models.CharField(max_length=20,verbose_name='班级名称', help_text='班级名称')

2、创建从表,学生表

# 学生信息表
class Student(models.Model):
    id = models.AutoField(primary_key=True, verbose_name='id主键', help_text='id主键')
    name = models.CharField(max_length=20,verbose_name='姓名', help_text='姓名')
    student_id = models.CharField(max_length=10,verbose_name='学号', help_text='学号',unique=True)

    # 创建外键,外键需要创建多的那一个表中(从表)
    # models.ForeignKey('应用名.主表的类名') 与哪个表建立外键
    # on_delete= 外键的级联删除:如果父表中的记录被删除,则子表中对应的记录如何处理
    # on_delete=models.CASCADE(),如果父表中的记录被删除,则子表中对应的记录自动被删除
    #
    class_name = models.ForeignKey('orders.Class',on_delete=models.CASCADE,verbose_name='班级', help_text='班级')

 注意:

a、创建外键,外键需要创建在多的那一个表中(从表中)

b、创建外键方式:

models.ForeignKey('应用名.父表类名',on_delete=删除策略)
  1. models.ForeignKey('应用名.主表的类名') 与哪个表建立外键
  2. on_delete= 外键的级联删除:如果父表中的记录被删除,则子表中对应的记录如何处理
  3. models.CASCADE,如果父表中的记录被删除,则子表中对应的记录自动被删除
  4. models.SET_NULL:当父表数据删除时,相对应的从表数据会被自动设置为null值
  5. models.PROTECT:当父表数据删除时,如果有相对应的从表数据会抛出异常
  6. models.SET_DEFAULT: 当父表数据删除时,相对应的从表数据会被自动设置为默认值,还需要额外指定default=True
     

手动sql插入数据:

INSERT INTO orders_class VALUES (1,"一班"),(2,"二班"),(3,"三班"),(4,"四班");

INSERT INTO orders_student VALUES (2,"张三","0002",1);
INSERT INTO orders_student VALUES (3,"张四","0003",1);
INSERT INTO orders_student VALUES (4,"张五","0004",2);
INSERT INTO orders_student VALUES (5,"张六","0005",2);

INSERT INTO orders_student VALUES (6,"张姗姗","0006",3);
INSERT INTO orders_student VALUES (7,"张红","0007",3);
INSERT INTO orders_student VALUES (8,"王莫涵","0008",3);
INSERT INTO orders_student VALUES (9,"李珍珍","0009",4);
INSERT INTO orders_student VALUES (10,"阿三","0010",4);

 

 

1.3 多对多

1、介绍

在多对多关系中,A 表中的一行可以匹配 B 表中的多行,反之亦然。

要创建这种关系,需要定义第三个表,称为结合表,它的主键由 A 表和 B 表的外部键组成。

2、注意:

多对多的创建原则:二个表与中间表创建1对多的关系。

3、举例:

如,学生选课兴趣课程场景。一个学生可以选多门课程。一个课程,可以让多个孩子上。

 

4、django ORM 框架实现 多对多 的表的创建

如果创建的是多对多的关系,可以在任何一个模型类使用ManyToManyField


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/537877.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汇编八、汇编控制静态数码管显示数字

1、实现目标 通过汇编语言,实现单个静态数码管依次循环显示0~9。 2、数码管 2.1、数码管外观 2.2、数码管工作原理 (1)数码管的亮灭是由内部LED的亮灭实现的。 (2)一位数码管内部有八颗LED灯,利用内部的LED灯的亮和灭让数码管显示不同的数字。 3、…

chatgpt赋能Python-mac怎么用python

Mac如何使用Python:从入门到实践 简介 Mac操作系统上的Python开发环境非常受欢迎,因为它是一种优雅的编程语言,具有良好的可读性,可以轻松处理不同类型的任务,包括网站开发、机器学习和数据分析等领域。本文将介绍如…

干外包3年,彻底寄了...

先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了6年的功能测试&…

瑞吉外卖 - 删除分类功能(13)

某马瑞吉外卖单体架构项目完整开发文档,基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成,有需要的胖友记得一键三连,关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料:https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

chatgpt赋能Python-minhash_python

MinHash Python算法:优化大数据处理和搜索引擎 在如今互联网化和其他技术转型的时代,SEO已经成为许多企业和个人的必要条件。SEO方法(搜索引擎优化)一直在不断的发展,MinHash算法是其中之一。本篇文章将会介绍MinHash算法和它在Python中的实…

万金油表示真干不过,部门新来的00后测试员已把我卷崩溃,想离职了...

在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&#x…

chatgpt赋能Python-numpy_分割

Numpy 分割:简介与应用 什么是 Numpy 分割? Numpy 是一种基于 Python 的科学计算库,它提供了对多维数组的支持。其中,分割是 Numpy 中一个非常重要的操作,它允许我们将一个数组沿着指定的轴切分成多个子数组&#xf…

synchronized 底层原理

synchronized 关键字的底层原理 jdk5 之前 synchronized 是重量级锁,但是jdk6 之后会有一个锁升级的过程 Monitor实现的锁属于重量级锁,你了解过锁升级吗? Java中的synchronized有偏向锁、轻量级锁、重量级锁三种形式,分别对应了锁只被一个…

Apache Zeppelin系列教程第六篇——Zengine调用Interpreter原理分析

Apache Zeppelin系列教程第五篇——Interpreter原理分析_诸葛子房_的博客-CSDN博客 Apache Zeppelin系列教程第四篇——JDBCInterpreter原理分析_诸葛子房_的博客-CSDN博客 前文介绍jdbc interpreter和interpreter模块交互代码,本篇文章主要分析Zengine调用Interp…

智能的本质人工智能与机器人领域的64个大问题阅读笔记(三)

目录 机器智能提高到人类的水平或者人类智能下降到机器的水平,都可以到达图灵点。 或许图灵测试是一个自我实现的预言:我们(声称)在打造“聪明”机器的同时,我们也在把人变笨。 不长脑的机器和不思考的人没什么两样&…

工作利器:三种简单方法将PPT转换成PDF

PDF是一种常用的文件格式,适合数据传输和阅读。在工作中,有时我们需要将PPT文件转换为PDF格式以方便使用。下面是几种将PPT转换为PDF的方法,其中方法二将修改为使用记灵在线工具进行转换。 方法一:直接将文件导出为PPT 一般来说…

OpenHarmony3.1安全子系统-签名系统分析

介绍 应用签名系统主要负责鸿蒙hap应用包的签名完整性校验,以及应用来源识别等功能。 子系统间接口: 应用完整性校验模块给其他模块提供的接口;完整性校验: 通过验签,保障应用包完整性,防篡改;…

postman接口自动化测试

Postman除了前面介绍的一些功能,还有其他一些小功能在日常接口测试或许用得上。今天,我们就来盘点一下,如下所示: 1.数据驱动 想要批量执行接口用例,我们一般会将对应的接口用例放在同一个Collection中,然…

上周,又劝退了10几个...

最近看了很多简历,很多候选人年限不小,但是做的都是一些非常传统的项目,想着也不能通过简历就直接否定一个人,何况现在大环境越来 越难,大家找工作也不容易,于是就打算见一见。 在沟通中发现,由…

chatgpt赋能Python-openpyxl_批注

Openpyxl 批注简介 Openpyxl 是一个用于操作 Microsoft Excel 文件的 Python 库,它提供了许多方便的功能来读取、写入和修改 Excel 文件。其中一个功能是批注,可以在单元格中添加注释或提醒。 Openpyxl 批注的具体用途 Openpyxl 批注在 Excel 工作表中…

应届毕业生第一份C++程序员工作看重什么?我聊聊自己的看法

大家知道应届毕业生的第一份工C程序员工作看重什么,我相信那位同学可能他那个想去做的时候就说啊,因为第二家公司是世界杯公司吗,是单休哈对吧,而且待遇没有另一家高。我相信我们大部分人其实都看中一个,是累不累啊&am…

(浙大陈越版)数据结构 第三章 树(上) 3.1 树和树的表示

目录 3.1.1 引子(顺序查找) 什么是树 查找 3.1.2 引子 二分查找例子(BinarySearch) 二分查找 3.1.3 引子 二分查找实现 二分查找代码 二分查找的启示 3.1.4 树的定义 一些基本术语: 3.1.5 树的表示 3.1.1 引子(顺序查找…

学习Se-net和Sk-net 附网络简单代码(pytorch)

(一)Se-net的原理和思路     Se-net严格来说是一个小结构,它可以直接插入已有的网络结构中,帮助原有结构获得更好的效果,如插入Resnet网络中。 Se-net的整个流程如下:     (1&#xf…

chatgpt赋能Python-opencv_python打开摄像头

OpenCV Python打开摄像头:一种简单的图像处理方式 OpenCV是一种常用的图像处理库,可以用Python编程轻松进行图像和视频处理。其中,打开摄像头也是OpenCV中常用的一种方法。在这篇文章中,我们将介绍OpenCV Python打开摄像头的原理…

chatgpt赋能Python-numpy开根

NumPy开根 在科学计算中,开根运算是一个经常需要进行的操作,它非常有用,可以用来求解方程、计算距离或者简单地将数据压缩成更容易理解的形式等。NumPy是一个强大的库,被广泛地用于Python编程中,它提供了用于开根的特…