Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Django教程 —— 模型类条件查询

Django教程 —— 模型类条件查询

作者头像
忆想不到的晖
发布于 2021-09-29 08:15:18
发布于 2021-09-29 08:15:18
1.2K00
代码可运行
举报
文章被收录于专栏:huihui
运行总次数:0
代码可运行

引言

在之前的 Django模型设计 中简单的介绍了如何利用模型类对数据库进行增删改查,在这篇中主要介绍使用模型类对数据库进行条件查询。让大家更加熟悉 Django 操作数据库。

环境

环境名称

版本

Python

3.7.9

Django

3.1.2

MySql-Server

5.7.32

PyMySQL

0.10.1

数据库表:

以如下数据表数据进行测试:

id

title

author

pub_date

read

comment

1

天龙八部

金庸

1967-10-17

5000

3000

2

射雕英雄传

金庸

1969-03-17

8000

5000

3

神雕侠侣

金庸

1959-10-17

6000

8000

4

三少爷的剑

古龙

1977-08-01

3000

1000

5

笑傲江湖

金庸

1969-03-17

7000

9000

字段查询

实现 sqlwhere 的功能,调用过滤器 filter()exclude()get(),下面以filter()为例。

通过 属性名_id 表示外键对应对象的 id 值。

语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
属性名称__比较运算符=

说明:属性名称和比较运算符间使用两个下划线,所以属性名不能包括多个下划线。

1) 查询等

exact:表示判等。

例:查询编号为1的图书。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
book = BookInfo.objects.filter(id__exact=1)
可简写为:
book = BookInfo.objects.filter(id=1)

2) 模糊查询

contains:是否包含。

说明:如果要包含%无需转义,直接写即可。

例:查询书名包含 的图书。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
books = BookInfo.objects.filter(title__contains='传')

startswith、endswith:以指定值开头或结尾。

例:查询书名以’部’结尾的图书

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
books = BookInfo.objects.filter(title__endswith='部')

以上运算符都区分大小写,在这些运算符前加上 i 表示不区分大小写 如 iexact、icontains、istartswith、iendswith.

3) 空查询

isnull:是否为null。

例:查询书名不为空的图书。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
books = BookInfo.objects.filter(title__isnull=False)

4) 范围查询

in:是否包含在范围内。

例:查询编号为1或3或5的图书

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
books = BookInfo.objects.filter(id__in=[1, 3, 5])

5) 比较查询

gt、gte、lt、lte:大于、大于等于、小于、小于等于。

名称

全称

含义

gt

greater than

大于

gte

greater than equal

大于等于

lt

less than

小于

lte

less than

小于等于

全称更方便理解记忆。

例:查询编号大于3的图书

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
books = BookInfo.objects.filter(id__gt=3)

不等于的运算符,使用exclude()过滤器。

例:查询编号不等于3的图书

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
books = BookInfo.objects.exclude(id=3)

6) 日期查询

year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算。

例:查询1969年发表的图书。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
books = BookInfo.objects.filter(pub_date__year=1969)

例:查询1960年1月1日后发表的图书。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
books = BookInfo.objects.filter(pub_date__gt=date(1960, 1, 1))

F对象

之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢?

答:使用 F对象,被定义在 django.db.models 中。

语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
F(属性名)

例:查询阅读量大于等于评论量的图书。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db.models import F
...
books = BookInfo.objects.filter(read__gte=F('comment'))

可以在F对象上使用算数运算。

例:查询阅读量大于2倍评论量的图书。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
books = BookInfo.objects.filter(read__gt=F('comment') * 2)

Q对象

多个过滤器逐个调用表示逻辑与关系,同 sql语句where 部分的 and 关键字。

例:查询阅读量大于20,并且编号小于3的图书。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
books = BookInfo.objects.filter(read__gt=20, id__lt=3)
或
books = BookInfo.objects.filter(read__gt=20).filter(id__lt=3)

如果需要实现 逻辑或or 的查询,需要使用 Q对象 结合 | 运算符,Q对象 被定义在 django.db.models 中。

语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Q(属性名__运算符=)

例:查询阅读量大于5000的图书,改写为Q对象如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db.models import Q
...
books = BookInfo.objects.filter(read__gt=5000)
改写成Q对象
books = BookInfo.objects.filter(Q(read__gt=5000))

Q对象 可以使用 &| 连接,& 表示逻辑与,| 表示逻辑或。

例:查询阅读量大于5000,或编号小于3的图书,只能使用Q对象实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
books = BookInfo.objects.filter(Q(read__gt=5000) | Q(pk__lt=3))

Q对象前可以使用 ~ 操作符,表示非、not

例:查询编号不等于3的图书。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
books = BookInfo.objects.filter(~Q(pk=3))

注意:pk,全称 primary key 代表主键 id

聚合函数

使用 aggregate() 过滤器调用聚合函数。聚合函数包括:Avg、Count、Max、Min、Sum,被定义在django.db.models 中。

例:查询图书的总阅读量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db.models import Sum
...
books = BookInfo.objects.aggregate(Sum('read'))

注意:aggregate 的返回值是一个字典类型,格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{'聚合类小写__属性名':}
  :
{'sum__read': 29000}

使用 count 时一般不使用 aggregate() 过滤器。

例:查询图书总数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
books = BookInfo.objects.count()

注意:count函数的返回值是一个数字。

公众号

新建文件夹X

大自然用数百亿年创造出我们现实世界,而程序员用几百年创造出一个完全不同的虚拟世界。我们用键盘敲出一砖一瓦,用大脑构建一切。人们把1000视为权威,我们反其道行之,捍卫1024的地位。我们不是键盘侠,我们只是平凡世界中不凡的缔造者 。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/12/15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
新时代程序员主流开发工具一览
俗话说的好:工欲善其事,必先利其器。一款好的开发工具对程序员来说是至关重要的,可以降低开发成本、提高开发的效率和代码质量。
程序员鱼皮
2021/07/22
1.5K0
盘点那些云端编辑器,助力代码开发
随着网络带宽的飞速提升,web 技术的更新迭代,网络延迟变得足够低,响应也变得足够快,于是出现了很多线上编辑器,它们大部分自身都集成了开发环境,可以做到开箱即用,于是越来越多的人开始接受并选择了云端编辑器作为开发工具,接下来我们就来分享几款表现不错的云端编辑器。
程序那些事儿
2023/07/24
9190
盘点那些云端编辑器,助力代码开发
腾讯云 Serverless 再携手 CODING,让开发者跑步上云
近年来,腾讯云持续在云原生领域打磨和完善产品矩阵,致力于为开发者上云提供更好的产品和服务。继前段时间 CODING CI 助力腾讯云 Serverless 全新应用控制台、持续保障 Serverless 应用快速部署稳定性之后,腾讯云 Serverless 产品和 CODING DevOps 进一步合作,在多场景上为开发者提供了更加便捷的使用方式,让开发者跑步上云。 Serverless 与 DevOps 均是云原生的重要一环。如在前不久 Techo 开发者大会上发布的《腾讯云原生路线图》中云原生最佳实
腾讯云serverless团队
2021/01/21
8640
CODING 再携手腾讯云 Serverless,让开发者跑步上云
近年来,腾讯云持续在云原生领域打磨和完善产品矩阵,致力于为开发者上云提供更好的产品和服务。继前段时间 CODING CI 助力腾讯云 Serverless 全新应用控制台、持续保障 Serverless 应用快速部署稳定性之后,CODING DevOps 和腾讯云 Serverless 产品进一步合作,在多场景上为开发者提供了更加便捷的使用方式,让开发者跑步上云。
腾讯云 CODING
2021/01/29
9070
CODING 再携手腾讯云 Serverless,让开发者跑步上云
2022 年的前端行业,咋样啦?
今天我们来看看 2022 年最权威的前端行业调查,调查结果来自于全球 125 个国家的 3700 位开发者。
ConardLi
2022/05/23
7540
2022 年的前端行业,咋样啦?
前端开发代码编辑器_前端自动生成代码
有时候需要经常写一些测试代码或示例,然后将这些代码分享给他人,少量的代码通过GitHub分享有点大材小用,而且他人要从GitHub上fork代码后,在本地用IDE打开,然后安装依赖、运行,这个步骤过于繁琐。
全栈程序员站长
2022/09/21
9630
前端开发代码编辑器_前端自动生成代码
2018年Python 值得关注的开源库、工具和开发者
码个蛋第249次推文 1 开源库 Web 领域:Sanic https://github.com/channelcat/sanic 这个库的名字和之前一个很火的梗有关,有人在 youtube 上画
企鹅号小编
2018/01/08
8630
2018年Python 值得关注的开源库、工具和开发者
盘点 2017年Python 领域值得关注的 5 个库、工具和开发者
今年 Python 增长迅猛,也有了不少新东西,在这里推荐 5 个值得在 2018 年继续关注的库、工具和开发者,看看有没有你没听过的? 值得关注的 5 个 Python 库 #Web 领域:Sanic 这个库的名字和之前一个很火的梗有关,有人在 youtube 上画 Sonic 那个蓝色小人,结果一本正经的画出了下面这货,给它起名叫 Sanic,还配了一句话是 Gotta go faster. 这个库和 Flask 类似,但是比它快很多,速度能在测试中达到每秒 36000 次请求。在2017年的
企鹅号小编
2018/01/10
8560
盘点 2017年Python 领域值得关注的 5 个库、工具和开发者
腾讯云 Cloud Studio 实战训练:快速构建React完成H5页面还原
我们经常会遇到远程办公的场景,下面我们打算用云 IDE Cloud Studio 快速搭建,并开发还原一个移动端 React H5 的简版点餐系统页面,从 0 到 1 体验云 IDE 给我们带来的优势,不需要装各种环境,简单易用,开箱即可上手。
陈橘又青
2023/07/24
3170
昨天GitHub迎来重大更新
在今年 GitHub 的第一个虚拟会议——Satellite 上,GitHub 发布了由 Visual Studio 提供技术支持的在线 IDE 工具——Codespaces。这是一款集成在 GitHub 网页中的开发工具,为开发者提供了不离开页面的「沉浸式」开发体验,目前已向公众开放小规模测试。
Nealyang
2020/05/19
1.1K0
昨天GitHub迎来重大更新
java在线编辑_十大在线编译器(IDE),干货收藏!
① 主流的脚手架都支持,比如在线create-react-app,vue-cli等(在线 fork 修改),支持 github 登录(项目导入),也支持 cli 上传例子,例子可以在线访问和下载,当然也支持内嵌到其他博客等网页中。
全栈程序员站长
2022/09/08
15.9K0
java在线编辑_十大在线编译器(IDE),干货收藏!
【腾讯云 Cloud Studio 实战训练营】CloudStudio体验真正的现代化开发方式,双手插兜不知道什么叫对手!
最近有幸参与了腾讯云举办的 腾讯云 Cloud Studio 实战训练营。在这个过程中,通过了解 Cloud Studio 的产品和实践,让我受益非浅,原来还可以这样开发! 也让我真正理解了这一产品所带来的意义。
憧憬博客
2023/07/28
4870
【腾讯云 Cloud Studio 实战训练营】CloudStudio体验真正的现代化开发方式,双手插兜不知道什么叫对手!
腾讯云AI代码助手评测:如何智能高效完成Go语言Web项目开发 🚀
腾讯云AI代码助手是一款辅助编码工具,基于混元代码大模型,提供技术对话、代码补全、代码诊断和优化等能力。它可以为开发者生成优质代码,解决技术难题,提升编码效率。
猫头虎
2024/08/07
6370
腾讯云AI代码助手评测:如何智能高效完成Go语言Web项目开发 🚀
2024 年最受欢迎的 5 个 Go 框架
Go(或称 Golang)是由 Google 打造的一门现代化编程语言,以其简洁性、高并发支持和卓越性能而深受开发者喜爱。从 Web 应用到 API 构建,再到后端服务开发,Go 的工具与库生态始终为开发者提供一流的解决方案。
FunTester
2025/01/23
2100
2024 年最受欢迎的 5 个 Go 框架
Web版VS Code上线:最好用的IDE终于发布网页版,然而微软发完秒删
机器之心报道 编辑:蛋酱、小舟 Visual Studio Code 发布了 Web 版本?还没有,发完又删了。 微软似乎「官宣」了编辑器 Visual Studio Code 的 Web 版本,但又很快删除了博客。最近,这一动态引起了开发者社区的热议。 9 月 1 日,微软在 Azure 产品更新列表中介绍了这项新服务,但很快就删掉了内容。这项服务和目前 GitHub 基于 Web 的编辑器差不多。使用免费的 Web 编辑器服务,任何 GitHub 用户都可以导航到 GitHub 文件和源代码存储库,
机器之心
2023/03/29
1.3K0
Web版VS Code上线:最好用的IDE终于发布网页版,然而微软发完秒删
几个今年超火的编程网站!
大家好,我是鱼皮,今天给大家推荐几个最近非常流行的编程网站,相信能够帮助大家提高编程效率、更好地学习编程。
程序员鱼皮
2021/12/21
1.1K0
几个今年超火的编程网站!
主流的java编译器_程序猿专用十大在线编译器(IDE)整理
① 主流的脚手架都支持,比如在线create-react-app,vue-cli等(在线 fork 修改),支持 github 登录(项目导入),也支持 cli 上传例子,例子可以在线访问和下载,当然也支持内嵌到其他博客等网页中。
全栈程序员站长
2022/09/08
3.2K0
主流的java编译器_程序猿专用十大在线编译器(IDE)整理
盘点那些可以在线编辑编译的线上编辑器
提到编辑器,我们能够想到很多软件,比如visual studio,vscode,atom,jetbrains,sublime,vim,emacs等,这些都是非常好用的编辑器,它们都能够用来写代码,并且搭配上编译器,可以用来编译执行代码。
程序那些事儿
2023/03/07
1.6K0
盘点那些可以在线编辑编译的线上编辑器
【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio构建Java、Python项目
云集成开发环境(Cloud Integrated Development Environment,云IDE)是一种基于云计算的开发工具,旨在为开发人员提供一个无需在本地计算机上安装和配置开发工具的环境。云IDE允许开发者通过网络浏览器访问一个在线平台,其中包含了代码编辑、调试、版本控制、构建和部署等开发工具和功能。
ha_lydms
2023/08/11
3340
【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio构建Java、Python项目
几个超火的在线编程网站,别错过!
大家好,我是鱼皮,今天给大家推荐几个最近非常流行的编程网站,相信能够帮助大家提高编程效率、更好地学习编程。
程序员鱼皮
2021/12/27
3.3K0
推荐阅读
相关推荐
新时代程序员主流开发工具一览
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验