Django连表查询

django——多表创建,添加纪录,查询 MySQL中表之间的关系 与MySQL中表之间的关系类似: 一对多,多对多,一对一。 mysql建立关系方法: https://blog.youkuaiyun.com/Light__1024/article/details/88344675 https://blog.youkuaiyun.com/Light__1024/article/details/88342893 django中处理方法: 一对多,在多的表中建立... 阅读详情
```bash
外键字段的增删改查
 #一对一,一对多,跨表"""一个作者对应多本书籍add在第三张关系表中添加数据  括号类即可以传主键字段也可以传数据对象,并且都支持传多个"""增:author_obj=models.Author.object.filter(pk=1).first()  author_obj.books.add(1,2)"""一个作者只针对了一个作者  但是set里面传入的数据应该是可迭代对象列表或者元祖,  整数等不可使用"""改:  author_obj.books.set([1,])  author_obj.books.set([1,2])"""remove移除指定不需要的数据,()不能跟元祖或者列表,支持传入多个数据"""删:  author_obj.books.remove(1)清空数据:  author_obj.books.clear()#清空当前作者和书籍的所有绑定关系()不需要传入任何数据
```
正反向查询的概念

```bash
正向查询
	书籍对象查出版社对象  外键字段在书表中#正向查询
 	书籍对象查作者对象  外键字段在书表中
  作者对象查作者详情 外键字段在作者中
  
  
反向对象
	出版社查书籍对象  外键字段不在出版社表中
  作者查书籍对象   外键字段不在作者表中
  作者详情查作者   外键字段不在作者详情
  
 """
 总结:
 	正反向的判断依据是,外键字段是否有直接关系
 	口诀:正向查询按外键字段,反向查询按表名小写。。。。
 """
```
基于对象的跨表查询(子查询)

```bash
""" 将一条SQL语句的查询结果当作另外一条SQL语句的查询条件"""
#查询主键为2的书籍对应的出版社
"""
基于对象的跨表查询
1.先查询书籍对象
2.在基于书籍对象查询出版社对象(书跟出版社的外键字段,在书中,所以是正向查询)
"""
book_obj=models.books.object.filter(pk=2).first
res=book_obj.publish
print(res)

#2.查询主键为3的书籍对应的作者
"""
1.先查询书籍3的书籍对象
2.在基于书籍对象查询对应的作者
3.存在多对多和一对一等关系.all()查询出所有的作者对象
"""
book_obj=models.books.object.filter(pk=3).first()
res=book_obj.authors.all()

#3.查询jason的详情数据
"""
1.先查找jason对象
2.在查找details详情表中关联Jason的数据,最后打印Jason的详情数据
"""
author_jason=models.authors.object.filter(name='jason').first()
res=author_jason.details.all()
for item in res
	print(item)
#小总结:基于对象的正向查询,数据对象点了外键字段之后,是否需要all取决于关联的数据项有几个,单个无需all

#4.查询北方出版社出版的书籍
"""
1.先查询北方出版社
2.在查询出关联的书籍
3.反向查询,表名小写加_set.all()
"""
north_shop=models.books_shop.object.filter(title='北方出版社').first()
res=north_shop.book_set.all()
#5.查询jason写过的书籍
"""
1.先查询jason对象
2.在基于jason查询书籍对象,Jason对象和书籍的外键字段在书籍表中,所以为反向
"""
jason_obj=models.authors.object.filter(name='jason').first
res=jason_obj.book_set.all()
#6.查询电话是110的作者姓名
"""
1.先查询出电话是110的对象
2.在基于110对象,110对象和作者对象的外键字段在作者表中,所以为反向
"""
police_obj=models.Phone.object.filter(num='110').first()
res=polisce_obj.author
```
基于双下划线的跨表查询(联表操作)

```bash
#1.查询主键为2的书籍对应的出版社对应的关系,一句话结束
res=models.Books.object.filter(pk=2).values('publish__name','publish__addr')

#2.查询主键为3的书籍对应的作者
book_obj=models.Books.object.filter(pk=3).values('Author__name')
#3.查询北方出版社出版的书籍
res=models.Pubilsh.object.filter(name='北方出版社').values('book__title')

双下划线进阶操作

#1.查询主键为2的书籍对应的出版社,不能点书籍
res=models.Publish.object.filter(book__pk=2)
```
聚合查询和分组查询

```bash
聚合函数
	max min sum count avg
  使用聚合函数需要导模块  
  from django.db.models import max min sum count avg
  聚合查询的关键词 aggregate
  eg:
 res=models.Book.objects.aggregate(Max('price'),Min('price'))
    
分组查询:关键词annotate
	#统计每一本书的作者个数
 res=models.Book.objects.annotate(author_num=Count('authors__pk')).values('author_num','title')
	#统计出每个出版社卖的最便宜的书的价格
 res=models.Book_shop.objects.annotate((min_price=Min('book__price')).values('min_price','title')
	#统计不止一个作者的图书
  """
  以书为基准,按书分类
  作者数为查询关键,过滤掉等于1的作者数的书
  """
 res=models.book.objects.annotate(author_num=Count('authors__pk')).filter(author_num__gt=1)
	#查询各个作者出的书的总价格
  """
  以作者为基准,按作者分类
  每个作者对应的书为查询的关键,计算每个作者书的价格
  """
 res=models.Author.objects.annotate(prince_sum=Sum('book__price')).values('name','price_sum')
                                       
"""
小总结:
1.大的分组
	models.表名.objects.annotate  按照models后面的表名分组(主键)
2.小的分组
	models.表名.objects.values('price').annotate()
"""
```
F查询和Q查询

```bash
F功能是获取数据库中字段原有的数据
如何导入F查询
from django.db.models import F
#字段加后缀
from django.db.models.functions import Concat
from django.db.models import Value
eg:将所有书籍的价格提升100元
res=models.Book.objects.update(price=F('price')+100)
"""
本段语法翻译,将所有书含有字段price的都加100更新
"""


```

Django实现一对多表模型的跨表查询方法 今天小编就为大家分享一篇Django实现一对多表模型的跨表查询方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 立即下载

相关推荐

东方财富 vs 新浪 vs AKShare:3 种股票实时数据接口性能与稳定性实测对比

本文深度评测了东方财富、新浪和AKShare三种股票实时数据接口的性能与稳定性。通过实际测试数据,从延迟、成功率和数据完整性三个维度进行全面对比,为量化交易和数据分析开发者提供选型参考。结果显示,东方财富接口在实时性和稳定性方面表现最优,适合高频交易场景。

weixin_30800807的博客 386

Django多表连接查询方法

Django多表连接查询方法

m0_71233415的博客 3137

Linux运维踩坑实录:手把手教你修复LVM中PV显示[unknown]的诡异问题

本文详细解析了Linux运维中LVM物理卷(PV)显示[unknown]的故障现象及修复方法。通过分析问题根源、提供标准修复流程和特殊场景处理方案,帮助运维人员快速解决VG容量异常、PV状态丢失等问题,并分享预防措施与最佳实践,确保LVM存储系统的稳定运行。

weixin_26869081的博客 348

Django的多表查询

所谓的正向和反向连接表操作的标识仅由Foreign_Key字段位于哪个表来确定,Foreign_Key字段可用于连接任何表中的表;否则,将使用与Foreign_Key字段关联的小写表名。一对多:对象。外键。关联表字段,值(外键字段_ 关联表字段)多对多:外键字段。全部()通过值、值列表和过滤器反转跨表:小写表名_ 关联的表字段按对象反向跨表:小写surface _set.all()。all():获取全部filter:再次筛选。

Pert的博客 2363

PPT高清导出秘籍:如何轻松设置600dpi图片分辨率

本文详细解析了PPT导出图片模糊的根本原因,并提供了通过修改Windows注册表将导出分辨率从默认的96dpi提升至600dpi的完整教程。该方法能显著提升图片清晰度,满足学术出版与高质量印刷需求,文中还包含效果对比、进阶设置及常见问题解答。

a0b1c2d3的专栏 1315

零基础学习CANoe Panel(5)——改变变量的值,控件图像也改变,这是怎么回事?

Panel 中控件的图像随着值变化,是怎么回事?

蚂蚁小兵 2145

Django 联表查询操作

本篇主要是python django框架的一些联表查询和原生查询实现。

json_li的博客 3127

ARFoundation系列讲解 - 手部跟踪编程

通过使用ARFoundation的手部跟踪子系统,我们可以轻松地在AR应用程序中实现与用户手部的交互。通过设置AR环境、创建场景和相机、添加手部跟踪功能以及编写相应的脚本,我们可以开始在AR场景中跟踪和操作用户的手部。在Unity中创建一个新场景,并将AR Session组件添加到场景中的一个空对象上。手部跟踪的具体实现可能因AR设备和平台的不同而有所差异,你可能需要根据你的使用情况进行一些适配和调整。当你将手部放入AR场景中时,手部跟踪系统将触发相应的事件,并调用脚本中的回调函数。

2301_79325339的博客 355

django模型的连表查询

在数据库当中,可以通过设置外键的方式将两个表进行连接,如果需要查询数据的时候就需要进行连表查询。 例如:假如我现在有两张表。userinfo 和 usertype,userinfo里面记录了用户的信息,usertype表里面记录了用户的角色。 两个表是通过外键进行关联。 usertype model class usertype(models.Model): name = ...

lucky404的博客 1万+

YOLOv8剪枝 l1剪枝测试精度仅掉0.8个点,速度提高10.7fps!

文章摘要: 本文提出了一种基于组归一化的重要性评分方法GroupNormImportance,用于神经网络剪枝中的通道选择。该方法支持多种变体,包括标准L1范数、组L1范数和BN缩放因子等计算方式。核心实现包括三个关键部分:1)支持p范数计算(默认为L2);2)提供7种组重要性归约方法(如均值、最大值等);3)提供8种归一化方案(包括标准化、高斯化、LAMP等)。该方法输入一个剪枝组,输出各通道的重要性分数,通过依赖图可实现结构化剪枝。实验对比图展示了剪枝前后的效果差异,验证了该方法的有效性。

FJN110的博客 397

YOLO11涨点优化:卷积魔改 | 可变形条带卷积(DSCN),魔改轻量DCNv3二次创新

如何跟YOLO11结合:1)和C3k2创新性结合

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 988

Django--ORM 多表查询

按模型名(小写)+双下线: .values('表名小写__被关联表中的字段'), 返回的是一个QuerySet对象, 对象中保存的是字典类型的数据。一对多,多对多的方法是一样的, 按照表名小写, 在跟上_set.all()>>>author_obj.book_set.all()正向查询, 按照关联字段+双下线>>> .values('关联字段__被关联表中的字段'), 返回的是一个QuerySet对象。2,外键字段再作者表中, 同样是正向查询,那么只需要按照字典detail查询即可。

Yietong的博客 1779

基于OpenCV的实时疲劳检测系统实现

本文介绍了一个基于OpenCV的实时疲劳检测系统,使用Python实现。系统通过Haar级联分类器检测人脸和眼睛,计算眼睛宽高比(EAR)和PERCLOS(眼睛闭合时间比例)来评估疲劳程度,分为4个等级:正常、轻度、中度和重度疲劳。核心代码包含人脸眼睛检测、疲劳评估和可视化显示功能,具有实时性、稳定性和直观的视觉反馈。系统可通过摄像头实时监控驾驶员状态,为疲劳驾驶预警提供简单有效的解决方案。

weixin_62135607的博客 232

Django之ORM跨表查询、join查询、聚合查询、分组查询

跨表查询分为两类: 基于对象查询(子查询) 基于双下划线查询(join查询) 1、基于对象的跨表查询(sql语句:子查询) 子查询: 基于一个查询结果作为另一个查询的条件 1.1 一对多 正向查询(按字段) # 查询西游记出版社的名字和邮箱 book = Book.objects.get(title='西游记') print(book.publish.name) print(book.publish.email) 本质上翻译两条sql如下: (0.000) SELECT "book_.

Sunny_Future的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

django orm关联查询_django中orm的多表查询

一、创建模型下面我们通过图书管理系统,来设计出每张表之间的对应关系。通过上图关系,来定义一下我们的模型类。from django.db import modelsclass Book(models.Model):title = models.CharField(max_length=32)price = models.DecimalField(max_digits=5, decimal_place...

weixin_39765290的博客 1107

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【Django】跨表查询要点

一、查询 mysql中3种跨表查询方式:笛卡尔积、子查询、连接查询。Django也有与之对应的语法。 二、基于对象的跨表查询 – (类似于子查询) 1、正向查询和反向查询 通过关系属性所在的model类去查询其关联表(类)的数据就是正向查询,反之为反向查询。正向查询靠属性,反向查询靠类名小写。 2、一对一 正向查询:获取吴老师的电话号码【对象.属性】 author_obj = models.Author.objects.filter(name=‘吴老师’).first() # 得到的是model对象 pri

每天进步一点点 1470

django orm关联查询_Django--ORM 多表查询

一 . 建立外键一对一建立外键外键名称 = models.OneToOneField(to='要连接的类名', to_field='字段')一对多建立外键外键名称 = models.ForeignKey(to='要连接的类名',to_field='字段')#外键要写在一对多的 那个多的类 下面,比如一个老师对应很多学生,外键就要写在学生的下面多对多建立外键外键名称 = models.ManyToM...

weixin_39698255的博客 817

Django跨表查询

外键字段的增删改查 一对多与一对一 多对多 # 针对一对多 一对一字段操作 # 增 # 直接录入相关的主键字段数据 # models.Book.objects.create(title='三国演义',price=123.32,publish_id=1) # publish_obj = models.Publish.objects.filter(pk=2).first() # models.Book.objects.create(title='水浒传',price=34

Struggle_Hard_Z的博客 1568

Django 之多表查询 与多表的使用

1.django的多表查询 主要区分为: 正向查询 逆向查询 1. 多表查询: 是一个复杂的查询,他分为对象查询和__模糊查询两种方式 2. 多表查询: 又分为 一对一查询, 一对多查询, 多对多查询 三种方式 3. 多表查询: 分为正向查询 与 逆向查询, 正向查询 是根据 这个表中的外键属性名开始出发查询的跨表查询 逆向查询 是根据 根据关联表的 类名 小写 开始...

weixin_30716725的博客 257

django 分页查询大表,很慢

问题 mysql有一张20W+的表,包含创建时间字段job_create_time,有索引,主键job_id,同时包含另外十几个字段。根据创建时间orderby之后,对其进行分页查询,当查询最后几页的时候会超级慢。 性能低的django语句,耗时18s 类似下面的语句,从20W的数据中查询靠后的几条。此时查询非常慢。 job_status = 'p' cur_page = int(200000/8) jobs = Job.objects.filter(job_status=job_s

m0_37606540的博客 1636

【Django—模板层之多表查询】

神奇的双下划线查询 方法 描述 __gt 大于 __lt 小于 __gte 大于等于 __lte 小于等于 __in 成员运算 __range 范围查询 __contains 区分大小写 __icontains 忽略大小写 __startswith 开头查询 __endswith 结尾查询 __regex 正则 __year 按照年份筛选数据 __month 按照月份筛选数据 ORM创建外键关系 外键字段的增删改查 正反向的概念 多表查询

Ban_a的博客 707

django orm关联查询_Django(ORM查询、多表、跨表、子查询、联表查询)

https://www.zhihu.com/video/1250419057172135936每日测验"""今日考题1.什么是FBV与CBV,能不能试着解释一下CBV的运作原理2.模版语法的传值需要注意什么,常见过滤器及标签有哪些3.自定义过滤器,标签,inclusion_tag的流程4.什么是模版的继承与导入,如何正确使用"""答案# 1.什么是FBV与CBV,能不能试着解释一下CBV的运作原理...

weixin_39629129的博客 886

Django ORM 主表查询从表加(从表) 限制条件

from django.db import models class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() def __str__(self): return self.name class Author(models.Model): name = models.CharField(max_length=200)

python_道无涯 685

python多表联合查询_Django 多表联合查询

一对多的表查询classProject(models.Model):name=models.CharField(u'项目名称',max_length=32,blank=True)id=models.CharField(u'项目ID',max_length=32,unique=True,primary_key=True,blank=True)create_date=models.Dat...

weixin_39769091的博客 861

django表查询

创建表 # 单表查询表 class User(models.Model): name = models.CharField(max_length=32) age = models.IntegerField() register_time = models.DateField() #配置auto_now_add=True ,创建数据记录的时候会把当前时间添加...

weixin_30687811的博客 378
上一篇: django电话号码新增
下一篇: python中html必备基础知识
tudoujun123
博客等级 码龄6年 5粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值