当前位置: 首页 > news >正文

Django之模型层

【1】常见的13中查询方法

       例子语法:models.Userinfo.objects.filter().all()

查询方法解释
all()查询所有数据
first()那queryset中第一条数据
last()那最后一条数据
filter()带有过滤条件的查询,查询不到结果返回None
get()带有guolv条件的查询,查询不到结果报错
values()指定查询的字段,返回的是列表套字典
value_list()指定查询的字段,返回的是列表套元组
distinct()去重
order_by()排序,默认是升序,降序在条件前面加 "-"
count()统计有多少条数据
reverse()反转,前提是要先排序
exclude()排除、
exists()判断某个字段存不存在

【2】基于下划线的查询

                例子语法:models.Userinfo.objects.filter(age__gt=3)

方法解释
__gt大于
__lt小于
__gte大于等于
__lte小于等于
__in是,例如(年龄是11)
__range范围,例如(年龄在18到40岁之间的  首尾都要)
__contains模糊查询,例如(查询出名字里面含有s的数据  ),区分大小写
__icontains模糊查询,例如(查询出名字里面含有s的数据  ),不区分大小写
__startswith判断是否以某个字母开头,例如(用户名以s开头的)
__endswith判断是否以某个字母结尾,例如(用户名以s结尾的)
__year,__month等时间

【3】一对多外键的增删改查

以Book表为例

【3.1】增:create()
  •  models.Book.objects.create(title = ' 西游记 ',price = ' 100 ' publish_id = 1)
    • title:书名、price:价格、publish_id:外键字段
【3.2】删:delete()
  •  models.Book.objects.filter(id=1).delete()
    • id:id字段
    • 删除id=1的字段
【3.3】修改:update()
  • models.Book.objects.filter(id=1).update(public_id=2)
    • 将id=1的那条记录的外键id的值改成2

【4】多对多外键的增删改查

以书籍表和作者表为例

        【4.1】增:add

第一步:先查

        book_obj = models.Book.objects.filter(id=1).first()

        print(book_obj.authors)        # 到达第三张表

第二步:增加

        book_obj.authors.add(1)      # 书籍id为1的书籍绑定一个主键为1 的作者

 

括号内可以传数字也可以是对象,并且都支持多个

        【4.2】删:remove

第一步:先查

        book_obj = models.Book.objects.filter(id=1).first()

        print(book_obj.authors)        # 到达第三张表

第二步:删除

        book_obj.authors.remove(1)      # 删除外键id=1的全部作者

 

括号内可以传数字也可以是对象,并且都支持多个

        【4.3】修改:set

第一步:先查

        book_obj = models.Book.objects.filter(id=1).first()

        print(book_obj.authors)        # 到达第三张表

第二步:增加

        book_obj.authors.set([2])      # 书籍id为1的书的原作者改为外键为2的作者

 

        set():括号内必须填一个可迭代对象,该对象既可以是数字也可以是对象,并且都支持多个

【5】正反向的概念(用于多表查询)

正向:拥有外键字段的表去查别的表。---------正向查询按外键字段查询

 

反向:没有外键字段的表去查有外键字段的表。

        

        反向查询按表名小写查询。如果表名小写查不到就加_set。例如:book_set

【6】多表查询

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

  • 子查询步骤
    • 1、先判断数据的表关系
    • 2、判断数据的正反向关系
    • 3、写方法

正向例题:

        

查询书籍主键为1的出版社book_obj = models.Book.objects.filter(pk=1).first()# 书查出版社 正向res = book_obj.publishprint(res)print(res.name)print(res.addr)

 基于对象在正向什么时候加 .all()问题:

        当查询的结果有多个的时候需要加 .all()


反向例题:

        

查询出版社是东方出版社出版的书publish_obj = models.Publish.objects.filter(name='东方出版社').first()# 出版社查书  反向res = publish_obj.book_set  # app01.Book.Noneres = publish_obj.book_set.all()print(res)

基于对象在反向什么时候需要加_set.all()

        在反向查询的时候,当查询的结果有多个,就需要加_set.all()

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

  • 联表查询步骤
    • 1、先判断数据的表关系
    • 2、判断数据的正反向关系
    • 3、写方法

例题的正向查询和反向查询的方法

        

1.查询jason的手机号和作者姓名# 正向
res = models.Author.objects.filter(name='jason').values('author_detail__phone','name')print(res)# 反向
res = models.AuthorDetail.objects.filter(author__name='jason').values('phone','author__name')print(res)

        【6.3】聚合查询:aggregate

集合查询一般配合分组一起使用

 

聚合查询需要导入from.db.models import Max,Min,Avg,Sum,Count

 

使用方法:

        

例子# 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)

        【6.4】分组查询:annotate

分组查询特点:

        分组之后只能获得分组的依据,其它的字段不能获取。

       

        这是因为设置了严格模式:ONLY_FULL_GROUP_BY

        只需要将严格模式的指令去除就行了

        例题

 from django.db.models import Max, Min, Sum, Count, Avg# 1.统计每一本书的作者个数res = models.Book.objects.annotate(author_num=Count('authors')).values('title','author_num')'''
models点后面的表名,是以Book表分组我们还可以给起别名author_num就是给Count('authors')起别名'''

分组查询按照指定字段分组:

        models.Book.object.values('price').annotate()

 

如果出现分组查询报错的情况,解决方式:修改严格模式

【7】F和Q查询

        【7.1】F查询

F查询作用:能够帮助我们直接获取到表中某个字段对应的数据

 

F查询需要导入:from django.db.models import F

 

F查询实例1:

        

# 1.查询卖出数大于库存数的书籍from django.db.models import Fres = models.Book.objects.filter(maichu__gt=F('kucun'))print(res)

F查询实例2:

        

# 3.将所有书的名称后面加上爆款两个字"""在操作字符类型的数据的时候 F不能够直接做到字符串的拼接"""
# 需要借用Concat方法和Value方法才能实现字符串的拼接from django.db.models.functions import Concatfrom django.db.models import Valuemodels.Book.objects.update(title=Concat(F('title'), Value('爆款')))'''如果直接使用F查询,得到的结果是所有的名称都会变成空白'''# models.Book.objects.update(title=F('title') + '爆款')  # 所有的名称会全部变成空白

        【7.2】Q查询

        Q查询将 filter方法括号内默认的and关系查询变换成or关系查询或not关系查询

 

Q查询默认有3中关系:and、or、not

        1、Q包裹用 " ," 分割是 and 关系

 例子: 

        

# 1.查询卖出数大于100或者价格小于600的书籍from django.db.models import Qres = models.Book.objects.filter(Q(maichu__gt=100),Q(price__lt=600))  # Q包裹逗号分割 还是and关系

        2、Q包裹用" | "分割是 or 关系

        

# 1.查询卖出数大于100或者价格小于600的书籍from django.db.models import Qres = models.Book.objects.filter(Q(maichu__gt=100)|Q(price__lt=600))  # Q包裹"|"分割 还是and关系

        3、Q查询前面加" ~ "就是 not 关系

        

# 1.查询卖出数大于100或者价格小于600的书籍from django.db.models import Qres = models.Book.objects.filter(~Q(maichu__gt=100)|Q(price__lt=600))'''
~Q(maichu__gt=100)只是这个条件是 not关系 竖杠后面的条件不是 not关系~(Q(maichu__gt=100)|Q(price__lt=600):这个才全是not关系'''

 

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)

相关文章:

Django之模型层

【1】常见的13中查询方法 例子语法:models.Userinfo.objects.filter().all() 查询方法解释all()查询所有数据first()那queryset中第一条数据last()那最后一条数据filter()带有过滤条件的查询,查询不到结果返回Noneget()带有guolv条件的查询,…...

京东数据挖掘(京东运营数据分析):2023年宠物行业数据分析报告

随着社会经济的发展,人均收入水平逐渐提高,使得宠物成为越来越多家庭的成员,宠物数量不断增长。伴随养宠人群的增多,宠物相关产业的发展也不断升温,宠物经济规模持续增长。 根据鲸参谋平台的数据显示,在宠物…...

五分钟k8s实战-Istio 网关

istio-03.png 在上一期 k8s-服务网格实战-配置 Mesh 中讲解了如何配置集群内的 Mesh 请求,Istio 同样也可以处理集群外部流量,也就是我们常见的网关。 其实和之前讲到的k8s入门到实战-使用Ingress Ingress 作用类似,都是将内部服务暴露出去的…...

vue-admin-template

修改登录接口 1.f12查看请求接口 模仿返回数据写接口 修改方式1 1.在env.devolopment修改 修改方式2 vue.config.js 改成本地接口地址 配置转发 后端创建相应接口,使用map返回相同的数据 修改前端请求路径 修改前端返回状态码 utils里面的request.js...

Go fsnotify简介

fsnotify是一个用Go编写的文件系统通知库。它提供了一种观察文件系统变化的机制,例如文件的创建、修改、删除、重命名和权限修改。它使用特定平台的事件通知API,例如Linux上的inotify,macOS上的FSEvents,以及Windows上的ReadDirec…...

分类预测 | Matlab实现PSO-BiLSTM-Attention粒子群算法优化双向长短期记忆神经网络融合注意力机制多特征分类预测

分类预测 | Matlab实现PSO-BiLSTM-Attention粒子群算法优化双向长短期记忆神经网络融合注意力机制多特征分类预测 目录 分类预测 | Matlab实现PSO-BiLSTM-Attention粒子群算法优化双向长短期记忆神经网络融合注意力机制多特征分类预测分类效果基本描述程序设计参考资料 分类效果…...

【Python】Pandas(学习笔记)

一、Pandas概述 1、Pandas介绍 2008年WesMcKinney开发出的库,专门用于数据挖掘的开源python库 以Numpy为基础,借力Numpy模块在计算方面性能高的优势 基于matplotib,能够简便的画图 独特的数据结构 import pandas as pd2、Pandas优势 便…...

京联易捷科技与劳埃德私募基金管理有限公司达成合作协议签署

京联易捷科技与劳埃德私募基金管理有限公司今日宣布正式签署合作协议,双方在数字化进程、资产管理与投资以及中英金融合作方面将展开全面合作。 劳埃德(中国)私募基金管理有限公司是英国劳埃德私募基金管理有限公司的全资子公司,拥有丰富的跨境投资经验和卓越的募资能力。该集…...

Netty Review - 从BIO到NIO的进化推演

文章目录 BIODEMO 1DEMO 2小结论单线程BIO的缺陷BIO如何处理并发多线程BIO服务器的弊端 NIONIO要解决的问题模拟NIO方案一: (等待连接时和等待数据时不阻塞)方案二(缓存Socket,轮询数据是否准备好)方案二存…...

​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​

软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】 课本里章节里所有蓝色字体的思维导图...

M系列 Mac安装配置Homebrew

目录 首先,验证电脑是否安装了Homebrew 1、打开终端输入以下指令: 2、如图所示,该电脑没有安装Homebrew ,下面我们安装Homebrew 一、官网下载 (不建议) 1、我们打开官网:https://brew.sh/ …...

WebRTC简介及使用

文章目录 前言一、WebRTC 简介1、webrtc 是什么2、webrtc 可以做什么3、数据传输需要些什么4、SDP 协议5、STUN6、TURN7、ICE 二、WebRTC 整体框架三、WebRTC 功能模块1、视频相关①、视频采集---video_capture②、视频编解码---video_coding③、视频加密---video_engine_encry…...

网工内推 | 国企、上市公司售前,CISP/CISSP认证,最高18K*14薪

01 中电福富信息科技有限公司 招聘岗位:售前工程师(安全) 职责描述: 1、对行业、用户需求、竞争对手等方面提出分析报告,为公司市场方向、产品研发和软件开发提供建议; 2、负责项目售前跟踪、技术支持、需…...

阿里云99元VS腾讯云88元,双11云服务器价格战,谁胜谁负?

在2023年的双十一优惠活动中,阿里云推出了一系列令人惊喜的优惠活动,其中包括99元一年的超值云服务器。本文将带您了解这些优惠活动的具体内容,以及与竞争对手腾讯云的价格对比,助您轻松选择最适合的云服务器。 99元一年服务器优…...

1.jvm基本知识

目录 概述jvm虚拟机三问jvm是什么?java 和 jvm 的关系 为什么学jvm怎么学习为什么jvm调优?什么时候jvm调优调优调什么 结束 概述 相关文章在此总结如下: 文章地址jvm类加载系统地址双亲委派模型与打破双亲委派地址运行时数据区地址运行时数据区-字符串…...

前端---掌握WebAPI:DOM

文章目录 什么是DOM?使用DOM获取元素事件操作元素获取、修改元素内容获取、修改元素属性获取、修改表单元素属性:input获取、修改样式属性直接修改样式:行内样式通过修改class属性来修改样式 新增节点删除节点 什么是DOM? DOM&am…...

最优化基础(一)

最优化基础(一)1 最优化问题的数学模型 通俗地说,所谓最优化问题,就是求一个多元函数在某个给定集合上的极值. 几乎所有类型的最优化问题都可以用下面的数学模型来描述: m i n f ( x ) s . t . x ∈ Ω min\ f({x})\\ s.t. \ {…...

基于JavaWeb+SpringBoot+Vue医疗器械商城微信小程序系统的设计和实现

基于JavaWebSpringBootVue医疗器械商城微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 摘 要 目前医疗器械行业作为医药行业的一个分支,发展十分迅速。…...

java程序中为什么经常使用tomcat

该疑问的产生场景: 原来接触的ssm项目需要在项目配置中设置tomcat,至于为什么要设置tomcat不清楚,只了解需要配置tomcat后项目才能启动。接触的springboot在项目配置中不需要配置tomcat,原因是springboot框架内置了tomcat&#xf…...

大带宽服务器需要选择哪些节点

选择大带宽服务器节点需要考虑以下几个因素: 地理位置:选择距离用户较近的节点,可以降低延迟,提高响应速度。 网络质量:大带宽服务器节点应该有良好的网络质量,稳定可靠,能够提供高速的网络传输…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...