首页 > 其他分享 >Django笔记十五之in查询及date日期相关过滤操作

Django笔记十五之in查询及date日期相关过滤操作

时间:2023-04-03 22:35:17浏览次数:75  
标签:__ filter 01 objects Django blog 过滤 date

这一篇介绍关于范围,日期的筛选

  1. in
  2. range
  3. date
  4. year
  5. week
  6. weekday
  7. quarter
  8. hour

1、in

in 对应于 MySQL 中的 in 操作,可以接受数组、元组等类型数据作为参数:

Blog.objects.filter(id__in=[1,2,3])

对应的 SQL 是:

select * from blog_blog where id in (1,2,3);

字符串也可以作为参数,但是转义后的 SQL 的意思不太一样:


Blog.objects.filter(name__in="abc")

对应的 SQL 为:

select * from blog_blog where name in ('a', 'b', 'c');

in 操作也可以用于子查询动态的获取列表信息:

inner_qs = Blog.objects.filter(name__contains='hunter')
Entry.objects.filter(blog__in=inner_qs)

注意,以上的QuerySet 只在第二步的时候会去查询数据库,其SQL类似于:

select * from blog_entry where blog_id in (select id from blog_blog where name like binary '%hunter%')

在第一条语句中,没有指定字段,所以是默认搜索 id 的值

如果需要搜索其他字段,比如 name,则需要使用 values() 函数或者 values_list 来指定字段:

inner_qs = Blog.objects.filter(name__contains='hunter').values('name')
Entry.objects.filter(blog__name__in=inner_qs)

对应的 SQL 为:

select * from blog_entry where  FROM `blog_entry` INNER JOIN `blog_blog` ON (blog_entry.id = blog_blog.id)
where blog_blog.name in (select name from blog_blog where name like binary '%hunter%')

2、range

range 是在什么范围之内,对应于 SQL 中的 between and

可以作用在 整型和日期类型字段:


Blog.objects.filter(id__range=[1, 10])

Entry.objects.filter(pud_date__range=['2020-01-01', '2023-01-01'])

3、date

获取符合条件的日期,作用在 datetimefield 上,因为 datefield 本身就是日期,所以不需要 __date 开修饰。

假设一个 model 为 TestModel:

class TestModel(models.Model):
	created_time = models.DateTimeField()

这个时候我们想要筛选某个日期,则可以如下使用:

TestModel.objects.filter(created_time__date='2022-01-01')

也可以和上一篇笔记中的 大小于结合使用:

TestModel.objects.filter(created_time__date__gte='2022-01-01')

4、year

筛选年份符合的数据,可作用于 datefield 和 datetimefield 上:

Entry.objects.filter(pub_date__year=2022)

对应的 SQL 为:

select * from blog_entry where pub_date between '2022-01-01' and '2022-12-31';

使用大小于操作:

Entry.objects.filter(pub_date__year__gte=2022)

对应的 SQL 是:

select * from blog_entry where pub_date >= '2022-01-01'

同样的,与 year 相对应的 month 和 day 也可以这样使用。

5、week

一年有 52 个周,如果想获取周数为第几个的话,可以如此操作:

Entry.objects.filter(pub_date__week=2)

对应的 SQL 为:

select * from blog_entry where WEEK(pub_date, 3) = 3;

6、weekday

weekday 对应的是 周几,周日是1,周一是2,到周六是 7

比如想找出 Entry 里所有周一的数据:

Entry.objects.filter(pub_date__weekday=2)

或者是想找出 2022年所有周一的数据:

Entry.objects.filter(pub_date__year=2022).filter(pub_date__weekday=2)

7、quarter

quarter 是查询季度数据,一年一共四个季度,1月1日到3月31日,4月1日到6月30日,7月1日到9月30日,10月1日到12月31日

比如查看所有第二季度的数据:

Entry.objects.filter(pub_date__quarter=2)

8、hour

hour 是小时,与上面的用法同:

TestModel.objects.filter(created_time__hour=9)

以上就是本篇笔记全部内容,接下来将介绍 Django 的 model 的聚合 aggregate 的用法。

本文首发于本人微信公众号:Hunter后端

原文链接:Django笔记十五之in查询及date日期相关过滤操作

如果想获取更多相关文章,可扫码关注阅读:
image

标签:__,filter,01,objects,Django,blog,过滤,date
From: https://www.cnblogs.com/hunterxiong/p/17284700.html

相关文章

  • python Django中的cookies和session会话保持技术
    cookies和session都是为了保持会话状态而诞生的两个存储技术会话定义:从打开浏览器访问一个网站,到关闭浏览器结束此次访问,称之为一次会话HTTP协议是无状态的,导致会话状态难以保持Cookies-定义cookies是保存在客户端浏览器上的存储空间Cookies特点......
  • python Django的admin后台建设
    什么是admin管理后台django提供了完善的后台管理数据库的接口,可供开发过程中调用和测试使用django会搜集所有已注册的模型类,为这些模型类提供数据管理界面,供开发者使用admin配置步骤1、创建后台管理账号-该账号为管理后台最高权限账号—注意:可以创建多个超级用户pytho......
  • Django自动插入登录用户用户名
    在Django管理界面中我想在发布时自动插入登录用户名和博客文章,目前我已经在每个用户的下拉菜单中显示每个用户选择但显然这不是很好,所以我想它自动输入这个。自动插入登录用户用户名在Django这里是我的代码:models.py从django.db进口车型从django.contrib.auth.models导入用户......
  • PAT Basic 1066. 图像过滤
    PATBasic1066.图像过滤1.题目描述:图像过滤是把图像中不重要的像素都染成背景色,使得重要部分被凸显出来。现给定一幅黑白图像,要求你将灰度值位于某指定区间内的所有像素颜色都用一种指定的颜色替换。2.输入格式:输入在第一行给出一幅图像的分辨率,即两个正整数 \(M\) 和 ......
  • Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump
    日志项目使用Maven的install打包,出现Pleaserefertodumpfiles(ifanyexist)[date].dump,[date]-jvmRun[N].dumpand[date].dumpstream.问题,导致打包失败。原因是Test类不通过,应该是测试代码有问题。解决方式一:选择下图的图标,然后install会跳过测试环节方式二:检......
  • Django笔记十四之统计总数、最新纪录和空值判断等功能
    本篇笔记将介绍一些Django查询中统计总数、最新纪录和空值判断等功能。countin_bulklatest、earliestfirst、lastexistscontains、icontainsgt、gte、lt、ltestartswith、istartswithisnull1、count返回查询的QuerySet的总数。比如想查询Blog下name='hunte......
  • Django使用数据库
    一、数据库配置使用前要设置时区TIME_ZONE,TIME_ZONE='UTC'还要注意setting.py配置文件头部的INSTALLED_APPS选项(已安装程序)。确认自建的pollsapp应用已经安装到总项目容器中了。就是添加一句话:‘pollsapp.apps.PollsappConfig’,其中pollsapp是你创建应用的名字,apps表示应......
  • 关于Date使用不当的bug
    关于Date使用不当的bug1、背景用户调用接口,传入一个参数分钟,表示想要查询距离现在多少分钟的记录。有的时候会查不到记录。2、排查过程大致代码。获取当前的时间的date对象now,通过now的时间戳计算前beforeMinute的时间戳,转换成date对象查询executeTime>=before&&exec......
  • Antd DatePicker 表单Value 转为 日期字符串格式
    AntdDatePicker表单Value转为日期字符串格式遇到问题:Antd4.x版本和5.x版本中DatePickervalue类型分别是:moment对象和dayjs对象类型,但通常提交表单时候,后端一般都要求是日期字符串格式“2022-08-09”这样;普遍的做法是在提交表单onFinish方法里对表单提交参数进......
  • Django项目的第1个应用
    1.在Django项目中,每一个应用都是一个python包,都用同一个技术规范。Django自带工具startapp,可以自动生成应用的基础目录结构。如:diango-daminstartapppollsapp2.运行后会创建一个pollsapp目录,不同之处是多一个空的views.py文件,存放视图。3.实现网页能看到视图:一是要有内容:在......