django中的filter日期查询属性有:year、month、day、week_day、hour、minute、second

但是但我在使用过滤查询是却总是无法过滤出月份,各种查资料,最后才发现是时区问题,django查询数据库时对应的ORM语句会用使用mysql自带的一些时间处理函数如convert_tz(时间转换函数),而mysql无法获取Asia/Shanghai的正确时间,查询的时候返回空列表。

--记录一下排查过程:

*查看mysql日志文件,看Django查询数据时的ORM语句

  1. 打开mysql.cnf配置文件,注释掉68 69行:【环境是ubuntu】

    sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

  2. 重启mysql服务
    sudo  service mysql restart
  3. 查看日志
    sudo tail -f /var/log/mysql/mysql.log
    # Linux命令:tail命令: 默认会显示文件的末尾,可以动态查看文件新加入的数据

*在另外一个终端进行django语句的执行:

>>> p = Post.objects.filter(publish__year=2018,slug="view") #测试过滤年份,获取一条数据

>>> p
[<Post: 使用基于类的试图>]

可以看到得到的日志如下:

>>> c = Post.objects.filter(publish__month=4,slug="view")
>>> c
[]   #还没解决时区问题的情况下是返回空的,所以在有可能在渲染页面时不能获得数据

解决方法是在终端输入:

# MySQL安装程序在mysql数据库中创建时区表,但不装载。所以必须手动装载

mysql_tzinfo_to_sql /usr/share/zoneinfo

# 然后重启数据库
service mysql restart

然后重新进入Django shell过滤数据,即可查得月份的数据

这个方法也可以处理mysql设置时区时报错的问题

使用SET GLOBAL time_zone = 'Asia/Shanghai';   命令设置时区
会却报错ERROR 1298 (HY000): Unknown or incorrect time zone: 'Asia/Shanghai'。

mysql默认的时区格式并不支持这种,而是写成 set time_zone='+8:00';这种格式,如果想要使用'Asia/Shanghai'的格式

就要用mysql_tzinfo_to_sql程序用来装载时区表,也是在终端命令行输入如下命令,跟上面的一样

mysql_tzinfo_to_sql /usr/share/zoneinfo   #第一种(一般第一种就可以了,推荐)
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -uroot mysql   #第二种
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -uroot --force mysql  #第三种

---了解,django中的时区问题

django中有两个时间概念:naive time 与 active time。

naive time:就是不带时区的时间,

Active time就是带时区的时间。

还有一个就是UTC时间,UTC时间表示的是格林尼治平均时即可,即零区时间

datetime模块是python自带的包,timezone是django内的工具包,

from datetime import date,datetime

from django.utils import timezone

使用datetime.datetime.utcnow()、datetime.datetime.now()输出的类似2015-05-11 09:10:33.080451就是不带时区的时间(naive time),而使用django.utils.timezone.now()输出的类似2015-05-11 09:05:19.936835+00:00的时间就是带时区的时间(Active time),其中+00:00表示的就是时区相对性。

解决-Django使用filter过滤时间,无法获取月份的问题的更多相关文章

  1. django 模型类的常见字段约束,以及filter 过滤和查询

    null 不设置时默认设置为False.设置为True时,数据库表字段中将存入NULL的记录. null和blank组合使用,null=True,blank=True,表示该字段可以为空 blank ...

  2. angular 如何获取使用filter过滤后的ng-repeat的数据长度

    在做项目的过程中,被产品要求在内容为空的过程中显示提示信息,然哦户内容使用ng-repeat循环输出的,并且使用了filter过滤.后在谷歌上找到解决方案,如下: ​之前代码如下显示: <ul& ...

  3. stark组件之delete按钮、filter过滤

    1.构建批量删除按钮 2.filter过滤 3.总结+coding代码 1.构建批量删除按钮 1.admin中每个页面默认都有 2.stark之构建批量删除 3.coding {% extends ' ...

  4. 11 stark组件之delete按钮、filter过滤

    1.构建批量删除按钮 1.admin中每个页面默认都有 2.stark之构建批量删除 3.coding {% extends 'base.html' %} {% block title %} < ...

  5. ASP.NET MVC 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁

    在开发程序的过程中,稍微不注意就会隐含有sql注入的危险.今天我就来说下,ASP.NET mvc 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁.不用每下地方对参数的值都进行检 ...

  6. 关于Django ORM filter方法小结

    django filter是一个过滤器,相当于SQL的select * from where. filter返回一个QuerySet对象,还可以在该对象上继续进行django orm 该有的操作. 有 ...

  7. AOP实践—ASP.NET MVC5 使用Filter过滤Action参数防止sql注入,让你代码安全简洁

    在开发程序的过程中,稍微不注意就会隐含有sql注入的危险.今天我就来说下,ASP.NET mvc 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁.不用每下地方对参数的值都进行检 ...

  8. filter过滤action的问题

    今天犯了一个错误,结果白白浪费了半个下午的时间,特记于此. filter过滤Action的时候,要把过滤器配置在Struts2拦截器的前面,这样过滤器才能过滤到Action,否则不可以.

  9. 【原创】Easyui tree filter 过滤本地数据无效的原因

    Easyui tree filter 过滤本地数据无效的解决方式    正确使用方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

随机推荐

  1. 新手立体四子棋AI教程(2)——价值评估函数

    上一篇我们完成了整个程序的基础框架,那么在讲到真正的搜索算法前,我们先来看看五子棋如何评估当前局势,以及如何计算某个位置的价值. 一.五子棋 在五子棋中,包括成五,活三,活二等定势,下图为山东师范大学 ...

  2. C#基础知识(一)自己总结的。。。

    一.变量的声明 访问修饰符  数据类型  变量名: 访问修饰符:public ,private,protected 变量的访问修饰符默认为private eg: Public  Int a: a=10 ...

  3. @Cacheable的实现原理

    如果你用过Spring Cache,你一定对这种配置和代码不陌生: <cache:annotation-driven cache-manager="cacheManager" ...

  4. C语言作业第二次总结

    1.作业亮点 1.1作业整体概况 本次作业全体同学能够按时完成作业,且大部分同学的作业体现了自己的思路和方法,具备了一定变成能力. 1.2推荐博客 林岳-代码注释清晰,详细.->博文 王艺斌-算 ...

  5. django获取ip与数据重复性判定

    获取ip if request.META.has_key('HTTP_X_FORWARDED_FOR'): ip_c = request.META['HTTP_X_FORWARDED_FOR'] el ...

  6. Beta冲刺Day1

    项目进展 李明皇 今天解决的进度 点击首页list相应条目将信息传到详情页 明天安排 优化信息详情页布局 林翔 今天解决的进度 前后端连接成功 明天安排 开始微信前端+数据库写入 孙敏铭 今天解决的进 ...

  7. 服务器磁盘阵列数据恢复,raid5两块硬盘掉线数据恢复方法

    [用户单位信息] 农业科学研究院某研究所 [磁盘阵列故障发生过程描述]客户的DELL MD1000服务器内置15块1TB硬盘搭建为RAID5磁盘阵列阵列,服务器在正常工作中有一块硬盘离线,管理员对磁盘 ...

  8. MSSQL---extents

    一.MSSQLextent分两种: 1. Mixed extent:每个表或索引创建时,MSSQL并不给它分配一个extent,而是在mixed extnet内分配一个页,空间需求扩大时,再分配一个… ...

  9. vue-入门

    数据绑定   <!--步骤1:创建html文件--> <!DOCTYPE html> <html lang="en"> <head> ...

  10. 深度爬取之rules

    深度爬取之rules CrawlSpider使用rules来决定爬虫的爬取规则,并将匹配后的url请求提交给引擎.所以在正常情况下,CrawlSpider不需要单独手动返回请求了. 在rules中包含 ...