数据库(三)--多对多,一对多,一对一
时间:2022-07-23
本文章向大家介绍数据库(三)--多对多,一对多,一对一,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
我们有四张表: person_publisher
person_book
person_author
person_author_book
接下来分别从正向查询(子表-->主表)和反向查询(主表-->子表)进行。
1.一对一
正向查询:查询book中id=2(python)对应的出版社
book_obj=models.Book.objects.get(id=2)
print(book_obj)
print(book_obj.publisher.name)
反向查询:查询publisher中id=1(清华大学出版社)对应的book
publisher_obj=models.Publisher.objects.get(id=1)
print(publisher_obj)
#类名_set.all()
print(publisher_obj.book_set.all())
2.一对多
正向查询:查询book中id=3(java)对应的出版社
book_obj=models.Book.objects.get(id=3)
print(book_obj)
print(book_obj.publisher.name)
反向查询:查询publisher中id=3(广州大学出版社)对应的book
publisher_obj=models.Publisher.objects.get(id=3)
print(publisher_obj)
print(publisher_obj.book_set.all())
那么,我们要是想查询python是由那几家出版社出版的(虽然一般只是一家) ,我们可以这样做:
book_obj=models.Book.objects.filter(title='python')
print(book_obj)
for i in book_obj:
print(i.publisher)
其实,我们发现一对一和一对多查询基本上是差不多的。
3.多对多
正向查询:查询作者名为gong的所有book
author_obj=models.Author.objects.get(name='gong')
print(author_obj.book.all())
反向查询:查询书为"网络基础"的所有作者
book_obj=models.Book.objects.get(title='网络基础')
print(book_obj.author_set.all())
总而言之,正向查询直接顺序获取,反向查询用 类名(全部小写)_set.all() 来获取。
弄了一天,总算初步理解了咋弄的。!!
- Numpy教程第1部分 - 阵列简介(常用基础操作总结)
- Session和Cookies的基本原理
- 浅析Numpy.genfromtxt及File I/O讲解
- 损失函数详解
- 排查Java的内存问题
- 使用两种方法让 ASP.NET Core 实现遵循 HATEOAS 结构的 RESTful API
- 设计模式六大原则(5):迪米特法则
- Selenium2+python自动化61-Chrome浏览器(chromedriver)
- 区块链可以减少社会不平等吗?
- 【干货】不止准确率:为分类任务选择正确的机器学习度量指标(附代码实现)
- python爬虫beautifulsoup4系列1
- 区块链入门教程
- python爬虫beautifulsoup4系列2
- python爬虫beautifulsoup4系列3
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C#调用C++编写的DLL
- Oracle基本参数(LOG_ARCHIVE_DEST_n)
- [安装文档]Oracle 12c 单节点安装之安装前准备
- Oracle基本参数(NLS_LANGUAGE)
- Oracle基本参数(NLS_TERRITORY)
- C# 探测器测试系统
- Panuon.UI.Silver使用和介绍
- Oracle基本参数(OPEN_CURSORS)
- Oracle基本参数(PROCESSES)
- C# 中的多态性
- Oracle基本参数(REMOTE_LISTENER)
- C#基于yolov3的行人检测
- yolov3和yolov4检测效果对比
- Oracle基本参数(REMOTE_LOGIN_PASSWORDFILE)
- VS2017中运行MySQL的存储过程