Django学习日志07

多表查询(跨表查询)

子查询:分步查询
链表查询:把多个有关系的表拼接成一个大表(虚拟表)
    inner join 
    left join     展示左表所有数据数据,右表展示符合查询条件的数据,查询不到的用null填充
    right join

多表查询前期表准备


class Book(models.Model):title = models.CharField(max_length=32)price = models.DecimalField(max_digits=8,decimal_places=2)publish_date = models.DateField(auto_now_add=True)# 一对多publish = models.ForeignKey(to='Publish')# 多对多authors = models.ManyToManyField(to='Author')class Publish(models.Model):name = models.CharField(max_length=32)addr = models.CharField(max_length=64)# varchar(254)  该字段类型不是给models看的 而是给后面我们会学到的校验性组件看的def __str__(self):return self.nameclass Author(models.Model):name = models.CharField(max_length=32)age = models.IntegerField()# 一对一author_detail = models.OneToOneField(to='AuthorDetail')class AuthorDetail(models.Model):phone = models.BigIntegerField()  # 电话号码用BigIntegerField或者直接用CharFieldaddr = models.CharField(max_length=64)

一对多外键增删改查

 

多对多外键增删改查

add set remove clear

正反向的概念

外键字段所在 的表查询就是正向

外键字段不在的表查询就是反向

正向查询按外键字段

反向查询按表名小写 _set

多表查询

子查询(基于对象的跨表查询)

 

联表查询 (基于双下划线的跨表查询)

聚合查询

# 聚合查询      aggregate
    """
    聚合查询通常情况下都是配合分组一起使用的
    只要是跟数据库相关的模块 
        基本上都在django.db.models里面
        如果上述没有那么应该在django.db里面
    """

models.Book.objects.aggregate(Max('price'),Min('price'),Sum('price'),Count('pk'),Avg('price'))
    print(res)

from app01 import modelsfrom django.db.models import Max,Min,Sum,Count,Avg# 1 所有书的平均价格# res = models.Book.objects.aggregate(Avg('price'))# print(res)# 2.上述方法一次性使用res = models.Book.objects.aggregate(Max('price'),Min('price'),Sum('price'),Count('pk'),Avg('price'))print(res)

分组查询

annotate

select age from t group by age;# 分组查询  annotate"""MySQL分组查询都有哪些特点分组之后默认只能获取到分组的依据 组内其他字段都无法直接获取了严格模式ONLY_FULL_GROUP_BYset global sql_mode='ONLY_FULL_GROUP_BY'"""from django.db.models import Max, Min, Sum, Count, Avg# 1.统计每一本书的作者个数# res = models.Book.objects.annotate()  # models后面点什么 就是按什么分组# res = models.Book.objects.annotate(author_num=Count('authors')).values('title','author_num')"""author_num是我们自己定义的字段 用来存储统计出来的每本书对应的作者个数"""# res1 = models.Book.objects.annotate(author_num=Count('authors__id')).values('title','author_num')# print(res,res1)"""代码没有补全 不要怕 正常写补全给你是pycharm给你的 到后面在服务器上直接书写代码 什么补全都没有 颜色提示也没有"""# 2.统计每个出版社卖的最便宜的书的价格(作业:复习原生SQL语句 写出来)# res = models.Publish.objects.annotate(min_price=Min('book__price')).values('name','min_price')# print(res)# 3.统计不止一个作者的图书# 1.先按照图书分组 求每一本书对应的作者个数# 2.过滤出不止一个作者的图书# res = models.Book.objects.annotate(author_num=Count('authors')).filter(author_num__gt=1).values('title','author_num')# """# 只要你的orm语句得出的结果还是一个queryset对象# 那么它就可以继续无限制的点queryset对象封装的方法## """# print(res)# 4.查询每个作者出的书的总价格# res = models.Author.objects.annotate(sum_price=Sum('book__price')).values('name','sum_price')# print(res)"""如果我想按照指定的字段分组该如何处理呢?models.Book.objects.values('price').annotate()后续BBS作业会使用你们的机器上如果出现分组查询报错的情况你需要修改数据库严格模式"""

F与Q查询

# F查询# 1.查询卖出数大于库存数的书籍# F查询"""能够帮助你直接获取到表中某个字段对应的数据"""from django.db.models import F# res = models.Book.objects.filter(maichu__gt=F('kucun'))# print(res)# 2.将所有书籍的价格提升500块# models.Book.objects.update(price=F('price') + 500)# 3.将所有书的名称后面加上爆款两个字"""在操作字符类型的数据的时候 F不能够直接做到字符串的拼接"""from django.db.models.functions import Concatfrom django.db.models import Valuemodels.Book.objects.update(title=Concat(F('title'), Value('爆款')))# models.Book.objects.update(title=F('title') + '爆款')  # 所有的名称会全部变成空白

Q查询

 # Q查询# 1.查询卖出数大于100或者价格小于600的书籍# res = models.Book.objects.filter(maichu__gt=100,price__lt=600)"""filter括号内多个参数是and关系"""from django.db.models import Q# res = models.Book.objects.filter(Q(maichu__gt=100),Q(price__lt=600))  # Q包裹逗号分割 还是and关系# res = models.Book.objects.filter(Q(maichu__gt=100)|Q(price__lt=600))  # | or关系# res = models.Book.objects.filter(~Q(maichu__gt=100)|Q(price__lt=600))  # ~ not关系# print(res)  # <QuerySet []># Q的高阶用法  能够将查询条件的左边也变成字符串的形式q = Q()q.connector = 'or'q.children.append(('maichu__gt',100))q.children.append(('price__lt',600))res = models.Book.objects.filter(q)  # 默认还是and关系print(res)

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

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

相关文章

基于go标准分层架构项目设计实现

基于go标准分层架构项目设计实现 缘起 个人博客网址 最近主要看了两方面知识&#xff0c;一方面是技术相关的&#xff0c;如何设计一个比较好的后端架构项目代码&#xff1b;一方面是非技术相关的&#xff0c;如何写一篇好的技术文章&#xff0c;能够让他人读懂并有收获。因…

如何选择示波器?

简介 对于很多工程师来讲&#xff0c;从市场中上百款不同价格和规格的各种型号的示波器中&#xff0c;选择一台新示波器是一件很挠首的事情。本文就旨在指引你拨开迷雾&#xff0c;希望能帮助你避免付出昂贵的代价。 重中之重 选择示波器的第一步不是要看那些示波器的广告和规…

GPS信号的数字接收处理matlab仿真,包括频率点搜索,捕获跟踪,相关峰检测等步骤

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. 频率点搜索 4.2. 捕获跟踪 4.3. 相关峰检测 5.算法完整程序工程 1.算法运行效果图预览 低信噪比下仿真结果如下&#xff1a; 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...…

使用DHorse发布SpringBoot项目到K8S

前言 在介绍DHorse的操作之前&#xff0c;先来介绍一下使用k8s发布应用的步骤&#xff0c;以SpringBoot应用为例进行说明。 1.首先从代码仓库下载代码&#xff0c;比如GitLab&#xff1b; 2.接着进行构建&#xff0c;比如使用Maven&#xff1b; 3.如果要使用k8s作为编排&am…

Atlassian午餐会直播回顾:如何拓展Jira工作流,加强团队协作?

工作流&#xff0c;这不仅是Jira的心脏&#xff0c;更是团队合作的魔法核心。 Jira中的工作流不仅仅是代码和配置&#xff0c;它更像是激活团队协作魔法的咒语。每一个环节&#xff0c;每一次流转&#xff0c;都充分展现了团队的独特魅力和智慧&#xff0c;让各种业务难题都能…

探伤仪的曲线

超声波检验DAC曲线、AVG曲线的区别、使用及制作方法 一、 概念 1.1 DAC曲线 DAC距离波幅曲线是描述某一确定反射体回波高度随距离变化的关系曲线。因此&#xff0c;AVG曲线和DAC曲线都有纵波、横波制作的曲线&#xff0c;并不是简单地由纵波、横波来划分何为AVG曲线&#xf…

js对后台数据库中blob类型的数据,进行二进制解码并解决中文乱码

后端 后端是在使用activiti7时&#xff0c;一个查询了部署了的流程图&#xff0c;对应的一个存在数据库中&#xff0c;数据类型为blob类型的值的这么一个接口 /*** 根据流程定义id查看流程图(xml或者图片)**/GetMapping(value "/selectPicture")public AjaxResult g…

Qt信号和槽的五种连接方式

enum ConnectionType {AutoConnection,DirectConnection,QueuedConnection,BlockingQueuedConnection,UniqueConnection 0x80 };这五种连接方式用于指定信号和槽之间的调用方式&#xff0c;它们的区别如下&#xff1a; AutoConnection&#xff08;默认&#xff09;&#xff1…

Kafka的重要组件,谈谈流处理引擎Kafka Stream

系列文章目录 上手第一关&#xff0c;手把手教你安装kafka与可视化工具kafka-eagle Kafka是什么&#xff0c;以及如何使用SpringBoot对接Kafka 架构必备能力——kafka的选型对比及应用场景 Kafka存取原理与实现分析&#xff0c;打破面试难关 防止消息丢失与消息重复——Kafka可…

Spring Boot中配置文件生效位置

1. 配置文件位置 首先小伙伴们要明白&#xff0c;Spring Boot 默认加载的配置文件是 application.properties 或者 application.yaml&#xff0c;properties优先级高于yaml。默认的加载位置一共有五个&#xff0c;五个位置可以分为两类&#xff1a; 从 classpath 下加载&…

「Qt Widget中文示例指南」如何创建一个计算器?(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文将展示如何使用…

45.120.101.X 如何找出网站建设中弱点和漏洞

漏洞扫描服务&#xff08;Vulnerability Scan Service&#xff09;集Web漏洞扫描、操作系统漏洞扫描、资产内容合规检测、配置基线扫描、弱密码检测五大核心功能&#xff0c;自动发现网站或服务器在网络中的安全风险&#xff0c;为云上业务提供多维度的安全检测服务&#xff0c…

再谈谈注解

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 注解&#xff0c;和反射…

成都瀚网科技有限公司抖音带货靠谱么

近年来&#xff0c;随着社交媒体的兴起&#xff0c;越来越多的企业开始利用抖音等短视频平台进行产品推广和销售。成都瀚网科技有限公司也紧跟潮流&#xff0c;通过抖音平台进行带货。那么&#xff0c;成都瀚网科技有限公司的抖音带货靠谱么&#xff1f;本文将从以下几个方面进…

网站监控的重要性及实施策略

随着互联网的快速发展&#xff0c;网站已经成为企业和个人不可或缺的在线服务平台。然而&#xff0c;网站的安全性和稳定性一直是企业及个人非常关注的问题。一旦网站出现故障或者被攻击&#xff0c;将会给企业和个人带来严重的损失。因此&#xff0c;实施有效的网站监控策略对…

Node.js之Buffer(缓冲器)

Buffer的概念 Buffer 是一个类似于数组的 对象&#xff0c;用于表示固定长度的字节序列 Bufer 本质是一段内存空间&#xff0c;专门用来处理 二进制数据。 Buffer创建方法 // 1.alloc let buf1 Buffer.alloc(10) // 使用alloc创造buffer的方法 是一个二进制类 都会归零 cons…

为什么 Django 后台管理系统那么“丑”?

哈喽大家好&#xff0c;我是咸鱼 相信使用过 Django 的小伙伴都知道 Django 有一个默认的后台管理系统——Django Admin 它的 UI 很多年都没有发生过变化&#xff0c;现在看来显得有些“过时且简陋” 那为什么 Django 的维护者却不去优化一下呢&#xff1f;原文作者去询问了多…

如何选择合适的域名注册商?需要考虑哪些方面因素?

随着互联网的快速发展&#xff0c;涌现出大大小小的众多域名注册服务商&#xff0c;但这些域名注册服务商在技术、服务、价格等方面参差不齐&#xff0c;给域名注册者带来了很多困扰。那么该如何选择合适的域名注册商呢&#xff1f;选择域名注册商需要考虑哪些方面呢&#xff1…

RT-DETR手把手教程,注意力机制如何添加在网络的不同位置进行创新优化

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文独家改进&#xff1a;本文首先复现了将EMA引入到RT-DETR中&#xff0c;并跟不同模块进行结合创新&#xff1b;1&#xff09;Rep C3结合&#xff1b;2&#xff09;直接作为注意力机制放在网络不同位置&#xff1b;3&#xff09;高效…

django DRF认证组件示例

一、学习DRF的认证类&#xff1b; 设计&#xff1a;LoginView不登录就可以访问&#xff0c;UserView和OrderView需要通过认证后才能访问&#xff1b; 1、urls.py urlpatterns [path(login/, views.LoginView.as_view()),path(user/, views.UserView.as_view()),path(order/,…