Django中五花八门的数据库查询

0. 前言

Django中的域查询对应于SQL查询语句中的WHERE字句。查询通常被用于filter()exclude()get()这些方法,以此来产生QuerySet对象。

1. 查询语法一览

exact

精确匹配。如果查询的值为None,则对应于SQL语言中的NULL
如果在查询过程中不指定任何查询类型,则默认为exact
示例:
在这里插入图片描述
对应于SQL语句:
在这里插入图片描述

iexact

大小写不敏感,其余与exact相同。
示例:
在这里插入图片描述
对应于SQL语句:
在这里插入图片描述

contains

大小写敏感的包含,包含指定文本。
示例:
在这里插入图片描述
对应于SQL语句:
在这里插入图片描述

icontains

大小写不敏感,其余与contains相同。
示例:
在这里插入图片描述
对应于SQL语句:
在这里插入图片描述

in

普通用法

选出在给定集合(List、Tuple、QuerySet、Str)中的记录。
示例:
在这里插入图片描述
对应于SQL语句:
在这里插入图片描述

嵌套查询

如果集合使用QuerySet,可以实现嵌套查询。
示例:
在这里插入图片描述
对应于SQL语句:
在这里插入图片描述

性能分析

对于某些数据库后端,如MySQL,并不能很好地优化嵌套查询,为了获得更好的性能,可以考虑提取出第一个查询的结果,然后传入第二个查询,即:
在这里插入图片描述
注意需要使用list(),这是为了使得第一个查询被执行,原因是QuerySet是懒惰(lazy)的!

gt、gte、lt、lte

大于、大于等于、小于、小于等于。
示例:
在这里插入图片描述
对应于SQL语句:
在这里插入图片描述

startswith

大小写敏感的startswith。
示例:
在这里插入图片描述
对应于SQL语句:
在这里插入图片描述

istartswith

大小写不敏感的startswith。

endswith

大小写敏感的endswith。

iendswith

大小写不敏感的endswith。

range

范围选择,对应于SQL中的BETWEEN。
示例:
在这里插入图片描述
对应于SQL语句:
在这里插入图片描述

时间日期类

date

对于datetime域,会被转型为date进行进一步查询。
示例:
在这里插入图片描述
不同的数据库引擎实现方式不一样,故不给出具体的SQL。

year、month、day

提取出年、月、日部分,进行判断。月份的范围是1~12。
示例:
在这里插入图片描述
对应于SQL语句:
在这里插入图片描述

week_day

选择星期几,1对应星期天,7对应星期六
示例:
在这里插入图片描述

time

将datetime域转换为time类型,可以使用datetime.time类型进行查询。
示例:
在这里插入图片描述

hour、minute、second

时分秒。

isnull

如果取值为True,对应SQL为IS NULL;
如果取值为False,对应SQL为IS NOT NULL。
示例:
在这里插入图片描述
对应于SQL语句:
在这里插入图片描述

regex

大小写敏感的正则表达式匹配。正则表达式的语法取决于对应的数据库后端。
示例:
在这里插入图片描述
对应于SQL语句:
在这里插入图片描述

iregex

大小写不敏感的正则表达式匹配。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值