Skip to main content
 首页 » 编程设计

python之按天过滤 django 查询

2025年05月04日31zhujiabin

我正在按月份过滤查询。 问题是在我的本地机器上一切正常,我得到了预期的结果,但在生产服务器中,查询集返回 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 

谁能帮帮我? 谢谢

请您参考如下方法:

MySQL 在 Django 中没有原生的 TimeZone 操作。

当 USE_TZ 为 True 时,日期时间字段在过滤前转换为当前时区。为此,您必须安装 pytz并使用 mysql_tzinfo_to_sql 加载时区表.

您的生产数据库没有 mysql_tzinfo_to_sql已加载。

方案一

加载mysql_tzinfo_to_sql关于生产

解决方案2

将USE_TZ设置为False

方案三

将数据库更改为 PostgreSQL。 TZ 支持是开箱即用的。

看example不支持 TZ 的 MySQL。