我按月过滤查询。 问题是在我的本地机器上一切正常,我得到了预期的结果,但在生产服务器中,查询集返回None。
本地
>>> Works.objects.filter(work_estimated_start_time__day=06)
>>> [<Works: 61: ns>]
>>> w[0].work_estimated_start_time
>>> datetime.datetime(2015, 12, 6, 15, 38, 37, tzinfo=<UTC>)
服务器
>>> Works.objects.filter(work_estimated_start_time__day=06)
>>> []
>>> w = Works.objects.all()
>>> w[0].work_estimated_start_time
>>> datetime.datetime(2015, 12, 6, 15, 38, 2, tzinfo=<UTC>)
数据库数据几乎相同。
来自两个环境的查询(两者都相同):
SELECT api_works.`work_id`, `api_works`.`work_central_id_id`, `api_works`.`work_user_id_id`, `api_works`.`work_driver_id_id`, `api_works`.`work_truck_id_id`, `api_works`.`work_estimated_start_time`, `api_works`.`work_start_time`, `api_works`.`work_end_time`, `api_works`.`work_first_pause_start_time`, `api_works`.`work_first_pause_end_time`, `api_works`.`work_second_pause_start_time`, `api_works`.`work_second_pause_end_time`, `api_works`.`work_creation_date`, `api_works`.`work_status`, `api_works`.`work_done`, `api_works`.`work_cancelation`, `api_works`.`work_enterprise_id_id`, `api_works`.`work_truck_type`
FROM `api_works`
WHERE EXTRACT(DAY FROM CONVERT_TZ(`api_works`.`work_estimated_start_time`, 'UTC', Europe/Zurich)) = 6
任何人都可以帮助我吗? 感谢
答案 0 :(得分:1)
MySQL在Django中没有本地TimeZone操作。
当 USE_TZ True 时,datetime字段会在过滤前转换为当前时区。为此,您必须已安装pytz并使用mysql_tzinfo_to_sql加载时区表。
您的生产数据库没有加载mysql_tzinfo_to_sql。
在生产
上加载mysql_tzinfo_to_sql将 USE_TZ 设为错误
将DB更改为PostgreSQL。 TZ支持是开箱即用的。
在没有TZ支持的情况下查看example MySQL。