django之如何按日期查询数据

 更新时间:2023年08月12日 15:19:42   作者:zhen24  
这篇文章主要介绍了django之如何按日期查询数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

django按日期查询数据

1、数据库模型 。

from django.db import models
class Get_time(models.Model):
    '''测试'''
    name = models.CharField(max_length=12)
    time= models.DateTimeField(auto_now_add=True)

2、序列化和分页。 

from rest_framework import serializers
from knife_manage import models
class Get_time_Serializer(serializers.ModelSerializer):
    '''序列化'''
    class Meta:
        model = models.Get_time
        fields = '__all__'
class PageNumber(PageNumberPagination):
    '''分页'''
    page_size = 50
    page_size_query_param = 'size'
    max_page_size = 5
    page_query_param = 'page'

3、路由。

url(r'^/test/$', views.Timeview.as_view({'get':'filter','post':'post'})),

4、视图。

 
class Timeview(ModelViewSet):
    authentication_classes = []   # 取消用户认证
    queryset = models.Get_time.objects.all()
    serializer_class = Get_time_Serializer  # 序列化数据
    pagination_class = PageNumber()  # 分
    def filter(self, request, *args, **kwargs):
        """多条件查询匹配"""
        queryset = models.Get_time.objects.filter(time__year = 2020) # 按年查询
        queryset = models.Get_time.objects.filter(time__month = 12)  # 按月查询
        queryset = models.Get_time.objects.filter(time__day= 9)  # 按日查询
        now = datetime.datetime.now()
        start = now-datetime.timedelta(hours=12, minutes=0, seconds=0)
        queryset = models.Get_time.objects.filter(time__gt= start) # 大于某个日期
        queryset = models.Get_time.objects.filter(time__lt= start) # 小于某个日期
        start_date = datetime.date(2009, 1, 1)
        end_date = datetime.date(2020, 3, 31)
        queryset = models.Get_time.objects.filter(time__range=(start_date, end_date)) # 按区间查询
        queryset = models.Get_time.objects.filter(time__week_day=4) # 按星期几查询
        pager_size = self.pagination_class.paginate_queryset(queryset=queryset, request=request, view=self)
        ser = self.serializer_class(instance=pager_size, many=True)
        return self.pagination_class.get_paginated_response(ser.data)
    def post(self, request, *args, **kwargs):
         """新增"""
        try:
            import random
            name=random.randint(10000,99999)
            return Response({'info': '操作成功!', 'code': 200})
        except Exception:
            return Response({'info': '操作失败!', 'code': 400})

5、结果:

6、extra。

1)、用户选择日历查询。

range=['2019-03-04', '2019-06-24']  # 前台传过来的数据
start=[int(x) for x in range[0].split('-')]
end=[int(x) for x in range[1].split('-')]
start_date = datetime.date(start[0], start[1],start[2])
end_date = datetime.date(end[0],end[1],end[2])

 2)、用户选择特定日期。

未设置时区时的操作

request_time='2012-09-09'
time_split=[int(x) for x in request_time.split('-')]
times='%s-%s-%s'%(time_split[0],time_split[1],time_split[2]+1)
cday = datetime.strptime(times, '%Y-%m-%d')
models.Get_time.objects.create(name=name,time=cday) 

设置时区时的操作

配置文件设置时区:

TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_TZ = False 

视图:

request_time='2012-09-09'
cday = datetime.strptime(request_time, '%Y-%m-%d')
models.Get_time.objects.create(name=name,time=cday)

django ORM查询指定日期范围内的数据

 dt_s= datetime.now().date()  # 2018-7-15
 dt_e = (dt_s- timedelta(7))  # 2018-7-08
 objs = Record.objects.filter(end_time__range=[dt_s, dt_e])
 objs = Record.objects.filter(Q(end_time__=dt_s) & Q(end_time__lt=dt_e)) # 效果相同

end_time为datetime类型数据

idend_timevalue
12018-07-09 04:23:161
22018-07-015 04:23:163

使用上面的命令返回的结果为第一条,以下是ORM封装的SQL语句,因为2018-07-15 04:23:16 比 2018-07-15大

select * from record where end_time between 2018-07-08 and 2018-07-15;

You can use range anywhere you can use BETWEEN in SQL — for dates, numbers and even characters.
Warning
Filtering a DateTimeField with dates won’t include items on the last day, because the bounds are interpreted as “0am on >the given date”. If pub_date was a DateTimeField, the above expression would be turned into this SQL:
SELECT … WHERE pub_date BETWEEN ‘2005-01-01 00:00:00’ and ‘2005-03-31 00:00:00’;
Generally speaking, you can’t mix dates and datetimes.

要将end_time转换为日期,就能返回两条数据了

select * from record where date(end_time) between 2018-07-08 and 2018-07-15;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python添加列表元素append(),extend()及 insert()

    python添加列表元素append(),extend()及 insert()

    这篇文章主要介绍了python添加列表元素append(),extend()及 insert(),列表是储存元素的数据类型,既然能存储元素,那么就类似数据库一样,增删改查的一些功能就不能少了。下面我们就来先看看添加列表元素方法有哪些,需要的朋友可以参考一下
    2022-03-03
  • Python数据处理的三个实用技巧分享

    Python数据处理的三个实用技巧分享

    数据处理无所不在,掌握常用技巧,事半功倍。这篇文章将使用Pandas开展数据处理分析,总结其中常用、好用的数据分析技巧,感兴趣的可以学习一下
    2022-04-04
  • python boto和boto3操作bucket的示例

    python boto和boto3操作bucket的示例

    这篇文章主要介绍了python boto和boto3操作bucket的示例,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-10-10
  • Python open读写文件实现脚本

    Python open读写文件实现脚本

    Python中文件操作可以通过open函数,这的确很像C语言中的fopen。通过open函数获取一个file object,然后调用read(),write()等方法对文件进行读写操作。
    2008-09-09
  • 关于Pytorch中模型的保存与迁移问题

    关于Pytorch中模型的保存与迁移问题

    在本篇文章中,笔者首先介绍了模型复用的几种典型场景;然后介绍了如何查看Pytorch模型中的相关参数信息;接着介绍了如何载入模型、如何进行追加训练以及进行模型的迁移学习等,需要的朋友可以参考下
    2021-10-10
  • Python操作json的方法实例分析

    Python操作json的方法实例分析

    这篇文章主要介绍了Python操作json的方法,结合实例形式简单分析了Python针对json数据使用解码loads()和编码dumps()相关操作技巧,需要的朋友可以参考下
    2018-12-12
  • python随机生成库faker库api实例详解

    python随机生成库faker库api实例详解

    今天小编就为大家分享一篇python随机生成库faker库api实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Python和Excel的完美结合的常用操作案例汇总

    Python和Excel的完美结合的常用操作案例汇总

    这篇文章主要介绍了Python和Excel的完美结合的常用操作案例汇总,文章通过围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 利用Python进行数据可视化常见的9种方法!超实用!

    利用Python进行数据可视化常见的9种方法!超实用!

    这篇文章主要给大家介绍了关于利用Python进行数据可视化常见的9种方法!文中介绍的方法真的超实用!对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • Python实现的凯撒密码算法示例

    Python实现的凯撒密码算法示例

    这篇文章主要介绍了Python实现的凯撒密码算法,简单介绍了凯撒密码的概念、原理并结合实例形式分析了Python实现凯撒密码算法的相关定义与使用操作技巧,需要的朋友可以参考下
    2018-04-04

最新评论