当前位置: 首页 > 后端技术 > Python

Django笔记15:查询中与日期相关的过滤操作

时间:2023-03-25 22:28:52 Python

本文介绍范围、日期过滤inrangedateyearweekweekdayquarterhour1,inin对应MySQL中的in操作,可以接受数组、元组等类型的数据作为参数:Blog.objects.filter(id__in=[1,2,3])对应的SQL是:select*fromblog_blogwhereidin(1,2,3);strings也可以作为参数,但是转义后的SQL意思不一样:Blog.objects.filter(name__in="abc")对应的SQL是:select*fromblog_blogwherenamein('a','b','c');in操作也可以用于子查询动态获取列表信息:inner_qs=Blog.objects.filter(name__contains='hunter')Entry.objects.filter(blog__in=inner_qs)注意上面的QuerySet只会查询其中的数据库第二步,其SQL类似In:select*fromblog_entrywhereblog_idin(selectidfromblog_blogwherenamelikebinary'%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*fromblog_entrywhereFROM`blog_entry`INNERJOIN`blog_blog`ON(blog_entry.id=blog_blog.id)whereblog_blog.namein(selecttnamefromblog_blogwherenamelikebinary'%hunter%')2.rangerange的范围是多少,对应between,SQL中可以用在整型和日期类型的字段中:Blog.objects.filter(id__range=[1,10])Entry.objects.filter(pud_date__range=['2020-01-01','2023-01-01'])3.date获取满足条件的日期作用于datetimefield,因为datefield本身是一个日期,所以不需要修改__date。假设一个模型是TestModel:classTestModel(models.Model):created_time=models.DateTimeField()这时候如果我们想过滤某个日期,可以这样使用:TestModel.objects.filter(created_time__date='2022-01-01')也可以结合前面注释中的size和size使用:TestModel.objects.filter(created_time__date__gte='2022-01-01')4.year过滤符合年份的数据,您可以对日期字段和日期时间字段进行操作:Entry.objects.filter(pub_date__year=2022)对应于SQL:select*fromblog_entrywherepub_datebetween'2022-01-01'and'2022-12-31';使用大于操作:Entry.objects.filter(pub_date__year__gte=2022)对应的SQL是:select*fromblog_entrywherepub_date>='2022-01-01'同理,年对应的月日也可以用在这边走。5.一年有52个星期。如果想获取周数,可以这样做:Entry.objects.filter(pub_date__week=2)对应的SQL是:select*fromblog_entrywhereWEEK(pub_date,3)=3;6.weekdayweekday对应星期几,星期天是1,星期一是2,星期六是7想找出2022年所有星期一的数据:entry.objects.filter(pub_date__year=2022).filter(pub_date__weekday=2)7、quarterquarter是查询季度数据,一年共四个季度,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是小时,和上面的用法一样:TestModel.objects.filter(created_time__hour=9)以上就是全部内容这张纸条。接下来介绍一下Django的模型聚合aggregate的用法。