解决-Django使用filter过滤时间,无法获取月份的问题
django中的filter日期查询属性有:year、month、day、week_day、hour、minute、second
但是但我在使用过滤查询是却总是无法过滤出月份,各种查资料,最后才发现是时区问题,django查询数据库时对应的ORM语句会用使用mysql自带的一些时间处理函数如convert_tz(时间转换函数),而mysql无法获取Asia/Shanghai的正确时间,查询的时候返回空列表。
--记录一下排查过程:
*查看mysql日志文件,看Django查询数据时的ORM语句
- 打开mysql.cnf配置文件,注释掉68 69行:【环境是ubuntu】
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

- 重启mysql服务
sudo service mysql restart
- 查看日志
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过滤时间,无法获取月份的问题的更多相关文章
- django 模型类的常见字段约束,以及filter 过滤和查询
null 不设置时默认设置为False.设置为True时,数据库表字段中将存入NULL的记录. null和blank组合使用,null=True,blank=True,表示该字段可以为空 blank ...
- angular 如何获取使用filter过滤后的ng-repeat的数据长度
在做项目的过程中,被产品要求在内容为空的过程中显示提示信息,然哦户内容使用ng-repeat循环输出的,并且使用了filter过滤.后在谷歌上找到解决方案,如下: 之前代码如下显示: <ul& ...
- stark组件之delete按钮、filter过滤
1.构建批量删除按钮 2.filter过滤 3.总结+coding代码 1.构建批量删除按钮 1.admin中每个页面默认都有 2.stark之构建批量删除 3.coding {% extends ' ...
- 11 stark组件之delete按钮、filter过滤
1.构建批量删除按钮 1.admin中每个页面默认都有 2.stark之构建批量删除 3.coding {% extends 'base.html' %} {% block title %} < ...
- ASP.NET MVC 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁
在开发程序的过程中,稍微不注意就会隐含有sql注入的危险.今天我就来说下,ASP.NET mvc 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁.不用每下地方对参数的值都进行检 ...
- 关于Django ORM filter方法小结
django filter是一个过滤器,相当于SQL的select * from where. filter返回一个QuerySet对象,还可以在该对象上继续进行django orm 该有的操作. 有 ...
- AOP实践—ASP.NET MVC5 使用Filter过滤Action参数防止sql注入,让你代码安全简洁
在开发程序的过程中,稍微不注意就会隐含有sql注入的危险.今天我就来说下,ASP.NET mvc 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁.不用每下地方对参数的值都进行检 ...
- filter过滤action的问题
今天犯了一个错误,结果白白浪费了半个下午的时间,特记于此. filter过滤Action的时候,要把过滤器配置在Struts2拦截器的前面,这样过滤器才能过滤到Action,否则不可以.
- 【原创】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 ...
随机推荐
- 【Python】 python对象的文件化 pickle
pickle 之前隐隐约约在哪里看到过pickle这个模块但一直没怎么用过.然后让我下定决心学习一下这个模块的原因竟然是[妹抖龙女(男)主在工作中用到了pickle哈哈哈].嗯嗯,不扯皮了.pickl ...
- 关于JSP页面URL传值所遇到的小问题
在JSP页面中我的页面传值加了分号,在后台取值是没有问题的. 但是在XML底层执行时就会返回不了值,这是什么原因呢? 经过努力排查发现了分号导致了${XXX}的值都成了和前面ID一样的串.去掉${XX ...
- 15分钟理解HTTPS——通俗篇
| 导语 它很深奥吗?你肯定常常见过它,使用它,甚至离不开它... 它很浅显吗?你可能觉得看透它,理解它,甚至懂它... 让我们用15分钟,不那么学术地将它的深挖到底~ 什么?如何证明我是我?本文要上 ...
- ionic start 创建ionic项目报错,及解决过程
问题描述: 前一次创建利用命令行创建ionic项目一次性成功,第二次没有运行: $ npm install -g ionic cordova 直接运行: ionic start ionicDemo 出 ...
- centos7环境下mysql5.7的安装与配置
最近无事闲来折腾虚拟机,以前都是折腾云服务器,现在自己捣捣.看到mysql的教程蛮好的,准备做个笔记.原文来自mysql5.7的安装与配置(centos7环境) 第一步:下载mysql [root@M ...
- Unity发布WebGL时如何修改默认的载入进度条
Unity发布WebGL版本后,需要去除Unity的Logo,首先关闭Splash Image去除Made with Unity启动画面(在File->Build Settings->Pl ...
- 剑指Offer-二叉树的下一个结点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 思路 分析二叉树的下一个节点,一共有以下情况: 二叉树 ...
- Beta第五天
听说
- 20162323周楠《Java程序设计与数据结构》第八周总结
20162323周楠 2016-2017-2 <程序设计与数据结构>第八周学习总结 教材学习内容总结 一个异常是一个对象,它定义了并不轻易出现的或是错误的情形 异常由程序或运行时环境抛出, ...
- Tornado 用户身份验证框架
1.安全cookie机制 import tornado.web session_id = 1 class MainHandler(tornado.web.RequestHandler): def ge ...