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. ubuntu apt-get安装、卸载软件命令及如何查看日志

    linux亮红灯的我,开始学习linux,学习使我快乐,大家一起来学习... 1.安装软件命令 sudo apt-get apache2     安装apache,安装在默认路径下,指定路径安装,其实 ...

  2. Linux下的 >, >>, <, ps, |, grep, /dev/null

    1 要将命令行运行的结果保存到文件中,truncate模式下使用 >,append模式下使用 >> ls > ~/test.txt 2 要将文件中的内容作为标准输入,应使用 & ...

  3. Beta Scrum Day 7

    听说

  4. 判断mine类型

    var http = require("http"); var fs = require("fs"); var url = require("url& ...

  5. const volatile同时限定一个类型int a = 10

    const和volatile放在一起的意义在于: (1)本程序段中不能对a作修改,任何修改都是非法的,或者至少是粗心,编译器应该报错,防止这种粗心: (2)另一个程序段则完全有可能修改,因此编译器最好 ...

  6. Flask 学习 五 电子邮件

    pip install mail from flask_mail import Mail # 邮件配置 app.config['MAIL_SERVER']='smtp.qq.com' app.conf ...

  7. JAVA类的方法调用和变量(全套)

    一.类的分类: 1.普通类 2.抽象类(含有抽象方法的类) 3.静态类(不需要实例化,就可以使用的类) 二.方法的分类: 1.私有方法(只有类的内部才可以访问的方法) 2.保护方法(只有类的内部和该该 ...

  8. 腾讯云服务器上安装phstudy和lnmp

    phpstudy的安装:wget -c http://lamp.phpstudy.net/phpstudy.bin chmod +x phpstudy.bin #权限设置./phpstudy.bin ...

  9. Thinkphp框架部署步骤

    Thinkphp框架部署步骤 thinkphp框架部署起来简单,但是由于步骤较多也容易遗忘: 这是安装了集成环境后的一个www根目录结构: 然后需要在这个目录下面创建一个文件夹做项目:thinkphp ...

  10. Jenkins+maven+git配置

    1)         安装maven 如下图我已装好maven(这是我很早以前装的,安装教程大家可以百度一下,很容易安装的) 2)         安装git客户端 如下图所示,我也安装好了git客户 ...