django字段查询参数及聚合函数
字段查询是指如何指定SQL WHERE子句的内容。它们用作QuerySet的filter(), exclude()和get()方法的关键字参数。
默认查找类型为exact。
下表列出了所有的字段查询参数:
| 字段名 | 说明 |
|---|---|
| exact | 精确匹配 |
| iexact | 不区分大小写的精确匹配 |
| contains | 包含匹配 |
| icontains | 不区分大小写的包含匹配 |
| in | 在..之内的匹配 |
| gt | 大于 |
| gte | 大于等于 |
| lt | 小于 |
| lte | 小于等于 |
| startswith | 从开头匹配 |
| istartswith | 不区分大小写从开头匹配 |
| endswith | 从结尾处匹配 |
| iendswith | 不区分大小写从结尾处匹配 |
| range | 范围匹配 |
| date | 日期匹配 |
| year | 年份 |
| month | 月份 |
| day | 日期 |
| week | 第几周 |
| week_day | 周几 |
| time | 时间 |
| hour | 小时 |
| minute | 分钟 |
| second | 秒 |
| isnull | 判断是否为空 |
| search | 1.10中被废弃 |
| regex | 区分大小写的正则匹配 |
| iregex | 不区分大小写的正则匹配 |
1. exact
精确匹配。 默认的查找类型!
Entry.objects.get(id__exact=14)
Entry.objects.get(id__exact=None)
2. iexact
不区分大小写的精确匹配。
Blog.objects.get(name__iexact='beatles blog')
Blog.objects.get(name__iexact=None)
第一个查询将匹配 'Beatles Blog', 'beatles blog', 'BeAtLes BLoG'等等。
3. contains
大小写敏感的包含关系匹配。
Entry.objects.get(headline__contains='Lennon')
这将匹配标题'Lennon honored today',但不匹配'lennon honored today'。
4. icontains
不区分大小写的包含关系匹配。
Entry.objects.get(headline__icontains='Lennon')
5. in
在给定的列表里查找。
Entry.objects.filter(id__in=[1, 3, 4])
还可以使用动态查询集,而不是提供文字值列表:
inner_qs = Blog.objects.filter(name__contains='Cheddar')
entries = Entry.objects.filter(blog__in=inner_qs)
或者从values()或values_list()中获取的QuerySet作为比对的对象:
inner_qs = Blog.objects.filter(name__contains='Ch').values('name')
entries = Entry.objects.filter(blog__name__in=inner_qs)
下面的例子将产生一个异常,因为试图提取两个字段的值,但是查询语句只需要一个字段的值:
# 错误的实例,将弹出异常。
inner_qs = Blog.objects.filter(name__contains='Ch').values('name', 'id')
entries = Entry.objects.filter(blog__name__in=inner_qs)
6. gt
大于
Entry.objects.filter(id__gt=4)
7. gte
大于或等于
8. lt
小于
9. lte
小于或等于
10. startswith
区分大小写,从开始位置匹配。
Entry.objects.filter(headline__startswith='Lennon')
11. istartswith
不区分大小写,从开始位置匹配。
Entry.objects.filter(headline__istartswith='Lennon')
12. endswith
区分大小写,从结束未知开始匹配。
Entry.objects.filter(headline__endswith='Lennon')
13. iendswith
不区分大小写,从结束未知开始匹配。
Entry.objects.filter(headline__iendswith='Lennon')
14. range
范围测试(包含于之中)。
import datetime
start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)
Entry.objects.filter(pub_date__range=(start_date, end_date))
警告:过滤具有日期的DateTimeField不会包含最后一天,因为边界被解释为“给定日期的0am”。
15. date
进行日期对比。
Entry.objects.filter(pub_date__date=datetime.date(2005, 1, 1))
Entry.objects.filter(pub_date__date__gt=datetime.date(2005, 1, 1))
当USE_TZ为True时,字段将转换为当前时区,然后进行过滤。
16. year
对年份进行匹配。
Entry.objects.filter(pub_date__year=2005)
Entry.objects.filter(pub_date__year__gte=2005)
当USE_TZ为True时,在过滤之前,datetime字段将转换为当前时区。
17. month
对月份进行匹配。取整数1(1月)至12(12月)。
Entry.objects.filter(pub_date__month=12)
Entry.objects.filter(pub_date__month__gte=6)
当USE_TZ为True时,在过滤之前,datetime字段将转换为当前时区。
18. day
对具体到某一天的匹配。
Entry.objects.filter(pub_date__day=3)
Entry.objects.filter(pub_date__day__gte=3)
当USE_TZ为True时,在过滤之前,datetime字段将转换为当前时区。
19. week
Django1.11中的新功能。根据ISO-8601返回周号(1-52或53),即星期一开始的星期,星期四或之前的第一周。
Entry.objects.filter(pub_date__week=52)
Entry.objects.filter(pub_date__week__gte=32, pub_date__week__lte=38)
当USE_TZ为True时,字段将转换为当前时区,然后进行过滤。
20. week_day
进行“星期几”匹配。 取整数值,星期日为1,星期一为2,星期六为7。
Entry.objects.filter(pub_date__week_day=2)
Entry.objects.filter(pub_date__week_day__gte=2)
当USE_TZ为True时,在过滤之前,datetime字段将转换为当前时区。
21. time
Django1.11中的新功能。
将字段的值转为datetime.time格式并进行对比。
Entry.objects.filter(pub_date__time=datetime.time(14, 30))
Entry.objects.filter(pub_date__time__between=(datetime.time(8), datetime.time(17)))
USE_TZ为True时,字段将转换为当前时区,然后进行过滤。
22. hour
对小时进行匹配。 取0和23之间的整数。
Event.objects.filter(timestamp__hour=23)
Event.objects.filter(time__hour=5)
Event.objects.filter(timestamp__hour__gte=12)
当USE_TZ为True时,值将过滤前转换为当前时区。
23. minute
对分钟匹配。取0和59之间的整数。
Event.objects.filter(timestamp__minute=29)
Event.objects.filter(time__minute=46)
Event.objects.filter(timestamp__minute__gte=29)
当USE_TZ为True时,值将被过滤前转换为当前时区。
24. second
对秒数进行匹配。取0和59之间的整数。
Event.objects.filter(timestamp__second=31)
Event.objects.filter(time__second=2)
Event.objects.filter(timestamp__second__gte=31)
当USE_TZ为True时,值将过滤前转换为当前时区。
25. isnull
值为False或True, 相当于SQL语句IS NULL和IS NOT NULL.
Entry.objects.filter(pub_date__isnull=True)
26. search
自1.10版以来已弃用。
27. regex
区分大小写的正则表达式匹配。
Entry.objects.get(title__regex=r'^(An?|The) +')
建议使用原始字符串(例如,r'foo'而不是'foo')来传递正则表达式语法。
28. iregex
不区分大小写的正则表达式匹配。
Entry.objects.get(title__iregex=r'^(an?|the) +')
聚合函数
Django的django.db.models模块提供以下聚合函数。
1. expression
引用模型字段的一个字符串,或者一个query expression。
2. output_field
用来表示返回值的model field,一个可选的参数。
3. **extra
关键字参数可以给聚合函数生成的SQL提供额外的信息。
4. Avg
class Avg(expression, output_field=FloatField(), **extra)[source]
返回给定表达式的平均值,它必须是数值,除非指定不同的output_field。
默认的别名:<field>__avg
返回类型:float(或指定任何output_field的类型)
5. Count
class Count(expression, distinct=False, **extra)[source]
返回与expression相关的对象的个数。
默认的别名:<field>__count
返回类型:int
有一个可选的参数:distinct。如果distinct=True,Count 将只计算唯一的实例。默认值为False。
6. Max
class Max(expression, output_field=None, **extra)[source]
返回expression的最大值。
默认的别名:<field>__max
返回类型:与输入字段的类型相同,如果提供则为`output_field`类型
7. Min
class Min(expression, output_field=None, **extra)[source]
返回expression的最小值。
默认的别名:<field>__min
返回类型:与输入字段的类型相同,如果提供则为`output_field`类型
8. StdDev
class StdDev(expression, sample=False, **extra)[source]
返回expression的标准差。
默认的别名:<field>__stddev
返回类型:float
有一个可选的参数:sample。默认情况下,返回群体的标准差。如果sample=True,返回样本的标准差。
SQLite 没有直接提供StdDev。
9. Sum
class Sum(expression, output_field=None, **extra)[source]
计算expression的所有值的和。
默认的别名:<field>__sum
返回类型:与输入字段的类型相同,如果提供则为output_field类型
10. Variance
class Variance(expression, sample=False, **extra)[source]
返回expression的方差。
默认的别名:<field>__variance
返回类型:float
有一个可选的参数:sample。
SQLite 没有直接提供Variance。
django字段查询参数及聚合函数的更多相关文章
- Django模型层之字段查询参数及聚合函数
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. 字段查询是指如何指定SQL WHERE子句的 ...
- ef实现一次查询多个聚合函数的字段
想用ef来写一个统计字段的语句,如下所示 select sum(price) as price_total, sum(amount) as amount_total from table1 发现似乎实 ...
- DQL排序查询和DQL聚合函数
DQL:查询语句 排序查询 语法: order by 字句 order by 排序字段1 排序方式1,排序字段2 排序方式2... 排序方式: ASC:升序,默认的 DESC:降序 SELECT * ...
- mysql 数据操作 单表查询 group by 聚合函数
强调: 如果我们用unique的字段作为分组的依据,则每一条记录自成一组,这种分组没有意义 多条记录之间的某个字段值相同,该字段通常用来作为分组的依据 如果按照每个字段都是唯一的进行分组,意味着按照这 ...
- mysql 数据操作 单表查询 group by 聚合函数 没有group by情况下
聚合函数只能用在组里使用 #没有group by 则默认算作一组 取出所有员工的最高工资 mysql> select max(salary) from employee; +---------- ...
- django字段的参数
所有的模型字段都可以接收一定数量的参数,比如CharField至少需要一个max_length参数.下面的这些参数是所有字段都可以使用的,并且是可选的. null 该值为True时,Django在数据 ...
- sqlserver 模糊查询,连表,聚合函数,分组
use StudentManageDB go select StudentName,StudentAddress from Students where StudentAddress like '天津 ...
- django----聚合查询 分组 F与Q查询 字段 及其 参数
目录 一.orm补充查询 聚合查询 1-1 分组查询 1-2 F与Q查询 1-3 二. 字段及其参数 常用字段 AutoField IntegerField CharField DateField D ...
- es的查询、排序查询、分页查询、布尔查询、查询结果过滤、高亮查询、聚合函数、python操作es
今日内容概要 es的查询 Elasticsearch之排序查询 Elasticsearch之分页查询 Elasticsearch之布尔查询 Elasticsearch之查询结果过滤 Elasticse ...
随机推荐
- 机器学习 python库 介绍
开源机器学习库介绍 MLlib in Apache Spark:Spark下的分布式机器学习库.官网 scikit-learn:基于SciPy的机器学习模块.官网 LibRec:一个专注于推荐算法的j ...
- 7.12 Models -- Frequently Asked Questions
一.Should I use a query or a filter to seach records?我应该使用一个查询或者过滤器来搜索记录吗? 这取决于你想要搜索多少reocrds并且它们是否被加 ...
- uva1411 最小值转最大值+二分图匹配
这题给了n个白点和n个黑点坐标,计算出他们两两配对的总路程最少, 我们算出他们之间的距离,为d,然后 w[j][i]=-d; 就将求最小值转化为求最大值,然后采用km进行匹配计算 #include & ...
- 《算法C语言实现》————三道题目
1.对于N = 10,100和1000,记录你的运行环境中分别运行一下程序所花费的时间.(用python) import datetime global a a = 0 def time_1(s): ...
- CAMediaTiming`协议(9.1 图层时间)
#CAMediaTiming`协议 CAMediaTiming协议定义了在一段动画内用来控制逝去时间的属性的集合,CALayer和CAAnimation都实现了这个协议,所以时间可以被任意基于一个图层 ...
- JMeter4.0二次开发之导入eclipse
1.先建立工程,命名为JMeter4.0. JDK版本为10.0.1 2.在官网下载src文件,通过文件系统导入到JMeter4.0工程中 3.在ant中选择download_jars,ant会自动下 ...
- vertical解锁table
Vertica 表发生死锁后, 通过下面3个查询即可解锁. --步骤1: 找到被锁表的 transaction_idselect transaction_id, t.* from v_monitor. ...
- 使用原生的javascript封装动画函数(有callback功能)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 解读 Q_D, Q_Q 指针
见 qglog.h文件定义: #define Q_D(Class) Class##Private * const d = d_func() #define Q_Q(Class) Class * ...
- Django框架----render函数和redirect函数的区别
render函数和redirect函数的区别: render:只会返回页面内容,但是未发送第二次请求 redirect:发挥了第二次请求,url更新 具体实例说明 render: redirect: