字段查询是指如何指定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字段查询参数及聚合函数的更多相关文章

  1. Django模型层之字段查询参数及聚合函数

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. 字段查询是指如何指定SQL WHERE子句的 ...

  2. ef实现一次查询多个聚合函数的字段

    想用ef来写一个统计字段的语句,如下所示 select sum(price) as price_total, sum(amount) as amount_total from table1 发现似乎实 ...

  3. DQL排序查询和DQL聚合函数

    DQL:查询语句 排序查询 语法: order by 字句 order by 排序字段1 排序方式1,排序字段2 排序方式2... 排序方式: ASC:升序,默认的 DESC:降序 SELECT * ...

  4. mysql 数据操作 单表查询 group by 聚合函数

    强调: 如果我们用unique的字段作为分组的依据,则每一条记录自成一组,这种分组没有意义 多条记录之间的某个字段值相同,该字段通常用来作为分组的依据 如果按照每个字段都是唯一的进行分组,意味着按照这 ...

  5. mysql 数据操作 单表查询 group by 聚合函数 没有group by情况下

    聚合函数只能用在组里使用 #没有group by 则默认算作一组 取出所有员工的最高工资 mysql> select max(salary) from employee; +---------- ...

  6. django字段的参数

    所有的模型字段都可以接收一定数量的参数,比如CharField至少需要一个max_length参数.下面的这些参数是所有字段都可以使用的,并且是可选的. null 该值为True时,Django在数据 ...

  7. sqlserver 模糊查询,连表,聚合函数,分组

    use StudentManageDB go select StudentName,StudentAddress from Students where StudentAddress like '天津 ...

  8. django----聚合查询 分组 F与Q查询 字段 及其 参数

    目录 一.orm补充查询 聚合查询 1-1 分组查询 1-2 F与Q查询 1-3 二. 字段及其参数 常用字段 AutoField IntegerField CharField DateField D ...

  9. es的查询、排序查询、分页查询、布尔查询、查询结果过滤、高亮查询、聚合函数、python操作es

    今日内容概要 es的查询 Elasticsearch之排序查询 Elasticsearch之分页查询 Elasticsearch之布尔查询 Elasticsearch之查询结果过滤 Elasticse ...

随机推荐

  1. 机器学习 python库 介绍

    开源机器学习库介绍 MLlib in Apache Spark:Spark下的分布式机器学习库.官网 scikit-learn:基于SciPy的机器学习模块.官网 LibRec:一个专注于推荐算法的j ...

  2. 7.12 Models -- Frequently Asked Questions

    一.Should I use a query or a filter to seach records?我应该使用一个查询或者过滤器来搜索记录吗? 这取决于你想要搜索多少reocrds并且它们是否被加 ...

  3. uva1411 最小值转最大值+二分图匹配

    这题给了n个白点和n个黑点坐标,计算出他们两两配对的总路程最少, 我们算出他们之间的距离,为d,然后 w[j][i]=-d; 就将求最小值转化为求最大值,然后采用km进行匹配计算 #include & ...

  4. 《算法C语言实现》————三道题目

    1.对于N = 10,100和1000,记录你的运行环境中分别运行一下程序所花费的时间.(用python) import datetime global a a = 0 def time_1(s): ...

  5. CAMediaTiming`协议(9.1 图层时间)

    #CAMediaTiming`协议 CAMediaTiming协议定义了在一段动画内用来控制逝去时间的属性的集合,CALayer和CAAnimation都实现了这个协议,所以时间可以被任意基于一个图层 ...

  6. JMeter4.0二次开发之导入eclipse

    1.先建立工程,命名为JMeter4.0. JDK版本为10.0.1 2.在官网下载src文件,通过文件系统导入到JMeter4.0工程中 3.在ant中选择download_jars,ant会自动下 ...

  7. vertical解锁table

    Vertica 表发生死锁后, 通过下面3个查询即可解锁. --步骤1: 找到被锁表的 transaction_idselect transaction_id, t.* from v_monitor. ...

  8. 使用原生的javascript封装动画函数(有callback功能)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  9. 解读 Q_D, Q_Q 指针

    见 qglog.h文件定义: #define Q_D(Class) Class##Private * const d = d_func()    #define Q_Q(Class) Class * ...

  10. Django框架----render函数和redirect函数的区别

    render函数和redirect函数的区别: render:只会返回页面内容,但是未发送第二次请求 redirect:发挥了第二次请求,url更新 具体实例说明 render: redirect: