django & mysql, queyry使用datetime没有结果

Posted on 一 27 2月 2017 in python

有一个django项目中需要根据日期来查询,在本地调试时没问题,可线上就查询不到结果:

now = datetime.datetime.now()
cashin = Cashin.objects.filter(update_time__month=now.month)

数据库用的是mysql,打印原始sql语句:

print Cashin.objects.filter(update_time__month=now.month)

#SELECT `cash_cashin`.`id`, `cash_cashin`.`create_time`, `cash_cashin`.`update_time`, `cash_cashin`.`status`, `cash_cashin`.`source`, `cash_cashin`.`order_id`, `cash_cashin`.`partner_order_id`, `cash_cashin`.`other`, `cash_cashin`.`desc`, `cash_cashin`.`money` FROM `cash_cashin` WHERE EXTRACT(MONTH FROM CONVERT_TZ(`cash_cashin`.`update_time`, 'UTC', Asia/Shanghai)) = 2

看到其中有提到timezone。于是一搜索,发现可能是没有加载mysql的time_zone为空。

select * from mysql.timezone

果然是,于是加载一下:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

问题解决了,原来是mysql的问题,而不是django。