前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django官方文档小结(二) -- QuerySet

Django官方文档小结(二) -- QuerySet

作者头像
Autooooooo
发布2020-11-09 10:05:30
1.8K0
发布2020-11-09 10:05:30
举报
文章被收录于专栏:Coxhuang

Django QuerySet

本文主要内容是关于Django框架中QuerySet知识小结

#1 环境

代码语言:javascript
复制
Python3.7.3
Django==2.0.7

#2 Field查找

字段查找是指定SQL WHERE子句的内容的方式。它们被指定为QuerySet方法的关键字参数filter(), exclude()并且get()。

参数

说明

xxx__exact

精确等于 = like ‘aaa’

xxx__iexact

精确等于(忽略大小写) = ilike ‘aaa’

xxx__contains

包含 = like ‘%aaa%’

xxx__icontains

包含(忽略大小写) = ilike ‘%aaa%’,但是对于SQLite来说,contains的作用效果等同于icontains。

xxx__gt

大于

xxx__gte

大于等于

xxx__lt

小于

xxx__lte

小于等于

xxx__in

存在于一个list范围内

xxx__startswith

以…开头

xxx__istartswith

以…开头 忽略大小写

xxx__endswith

以…结尾

xxx__iendswith

以…结尾,忽略大小写

xxx__range

在…范围内

xxx__year

日期字段的年份

xxx__month

日期字段的月份

xxx__day

日期字段的日


  1. exact

完全符合,如果提供用于比较的值None,则将其解释为SQL NULL。

例子:

代码语言:javascript
复制
Entry.objects.get(id__exact=14)
Entry.objects.get(id__exact=None)

SQL:

代码语言:javascript
复制
SELECT ... WHERE id = 14;
SELECT ... WHERE id IS NULL;
  1. iexact

不区分大小写的完全匹配,如果提供用于比较的值None,则将其解释为SQL NULL。

例子:

代码语言:javascript
复制
Blog.objects.get(name__iexact='beatles blog')
Blog.objects.get(name__iexact=None)

SQL:

代码语言:javascript
复制
SELECT ... WHERE name ILIKE 'beatles blog';
SELECT ... WHERE name IS NULL;
  1. contains

区分大小写的包含。

例子:

代码语言:javascript
复制
Entry.objects.get(headline__contains='Lennon')

SQL:

代码语言:javascript
复制
SELECT ... WHERE headline LIKE '%Lennon%';

注意:

SQLite不支持区分大小写的LIKE语句; contains 就像icontainsSQLite一样。

  1. icontains

不区分大小写的包含。

例子:

代码语言:javascript
复制
Entry.objects.get(headline__icontains='Lennon')

SQL:

代码语言:javascript
复制
SELECT ... WHERE headline ILIKE '%Lennon%';
  1. in

在给定的可迭代中; 通常是列表,元组或查询集。

例子:

代码语言:javascript
复制
Entry.objects.filter(id__in=[1, 3, 4])

SQL:

代码语言:javascript
复制
SELECT ... WHERE id IN (1, 3, 4);

还可以使用查询集动态评估值列表,而不是提供文字值列表:

代码语言:javascript
复制
inner_qs = Blog.objects.filter(name__contains='Cheddar')
entries = Entry.objects.filter(blog__in=inner_qs)

SQL:

代码语言:javascript
复制
SELECT ... WHERE blog.id IN (SELECT id FROM ... WHERE NAME LIKE '%Cheddar%')
  1. gt/gte/lt/lte

例子:

代码语言:javascript
复制
Entry.objects.filter(id__gt=4)

SQL:

代码语言:javascript
复制
SELECT ... WHERE id > 4;
  1. startswith

区分大小写的开头。

例子:

代码语言:javascript
复制
Entry.objects.filter(headline__startswith='Lennon')

SQL:

代码语言:javascript
复制
SELECT ... WHERE headline LIKE 'Lennon%';

注意:

SQLite不支持区分大小写的LIKE语句; startswith就像istartswith在SQLite中一样。

  1. istartswith

不区分大小写的开头。

例子:

代码语言:javascript
复制
Entry.objects.filter(headline__istartswith='Lennon')

SQL:

代码语言:javascript
复制
SELECT ... WHERE headline ILIKE 'Lennon%';
  1. endswith

区分大小写的结尾。

例子:

代码语言:javascript
复制
Entry.objects.filter(headline__endswith='Lennon')

SQL:

代码语言:javascript
复制
SELECT ... WHERE headline LIKE '%Lennon';

注意:

SQLite不支持区分大小写的LIKE语句; endswith就像iendswith在SQLite中一样。

  1. iendswith

不区分大小写的结尾。

例子:

代码语言:javascript
复制
Entry.objects.filter(headline__iendswith='Lennon')

SQL:

代码语言:javascript
复制
SELECT ... WHERE headline ILIKE '%Lennon';
  1. range

范围测试(包括在内)。

例子:

代码语言:javascript
复制
import datetime
start_date = datetime.date(2019, 1, 1)
end_date = datetime.date(2019, 3, 31)
Entry.objects.filter(pub_date__range=(start_date, end_date))

SQL:

代码语言:javascript
复制
SELECT ... WHERE pub_date BETWEEN '2019-01-01' and '2019-03-31';
  1. date

对于datetime字段,将值转换为日期。允许链接其他字段查找。采用日期值。

例子:

代码语言:javascript
复制
Entry.objects.filter(pub_date__date=datetime.date(2005, 1, 1))
Entry.objects.filter(pub_date__date__gt=datetime.date(2005, 1, 1))

SQL:

代码语言:javascript
复制
此查找不包含等效的SQL代码片段,因为相关查询的实现因不同的数据库引擎而异。
  1. year/month/day/week/week_day/quarter(取1到4之间的整数值,表示一年中的四分之一。)

对于日期和日期时间字段,确切的年份匹配。允许链接其他字段查找。需要整数年。

例子:

代码语言:javascript
复制
Entry.objects.filter(pub_date__year=2005)
Entry.objects.filter(pub_date__year__gte=2005)

SQL:

代码语言:javascript
复制
SELECT ... WHERE pub_date BETWEEN '2005-01-01' AND '2005-12-31';
SELECT ... WHERE pub_date >= '2005-01-01';
  1. time/hour/minute/second

对于datetime字段,将值转换为时间。允许链接其他字段查找。取一个datetime.time值。

例子:

代码语言:javascript
复制
Entry.objects.filter(pub_date__time=datetime.time(14, 30))
Entry.objects.filter(pub_date__time__range=(datetime.time(8), datetime.time(17)))

SQL:

代码语言:javascript
复制
此查找不包含等效的SQL代码片段,因为相关查询的实现因不同的数据库引擎而异。
  1. isnull

采用任一True或False,其对应于SQL查询 和分别。IS NULLIS NOT NULL

例子:

代码语言:javascript
复制
Entry.objects.filter(pub_date__isnull=True)

SQL:

代码语言:javascript
复制
SELECT ... WHERE pub_date IS NULL;

#3 API

API

格式

说明

filter()

filter(** kwargs)

返回QuerySet包含与给定查找参数匹配的新对象。

exclude()

exclude(** kwargs)

返回QuerySet包含与给定查找参数不匹配的新对象。

annotate()

annotate(* args,** kwargs)

表达式可以是简单值,对模型(或任何相关模型)上的字段的引用,或者是通过与对象中的对象相关的对象计算的聚合表达式(平均值,总和等)QuerySet。

order_by()

order_by(*fields)

默认情况下,a返回的结果按模型中选项QuerySet给出的排序元组排序。您可以使用该方法在每个基础上覆盖它。

reverse()

reverse()

使用此reverse()方法可以反转返回查询集元素的顺序。reverse()第二次调用将排序恢复到正常方向。

distinct()

distinct(*fields)

消除查询结果中的重复行。

values()

values(*fields, **expressions)

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Django QuerySet
  • #1 环境
  • #2 Field查找
  • #3 API
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档