【问题标题】:Filter django query by day按天过滤 django 查询
【发布时间】:2016-03-11 05:42:45
【问题描述】:

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

有人可以帮助我吗? 谢谢

【问题讨论】:

  • 也许是个愚蠢的问题,但我假设您已经在本地机器上制作了生产数据的副本以确保查询匹配?
  • 你能从两个环境中打印查询吗? str(Works.objects.filter(work_estimated_start_time__day=06).query)
  • 你使用什么数据库?
  • 我正在使用 mysql。我会尽快用两种环境中的查询更新问题。谢谢大家
  • OT:永远不要使用前导零。前导零表示八进制文字。 python.org/dev/peps/pep-3127/#id14

标签: python django python-2.x


【解决方案1】:

MySQL 在 Django 中没有本机 TimeZone 操作。

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

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

解决方案 1

在生产环境中加载 mysql_tzinfo_to_sql

解决方案 2

USE_TZ 设置为 False

解决方案 3

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

看看example没有 TZ 支持的 MySQL。

【讨论】:

  • 非常感谢@TomaszJakubRup。这解决了我的问题。我不认为 MySQL 是问题所在。我使用了解决方案 1,因为我需要使用 TZ 并且不想迁移到另一个数据库系统。
猜你喜欢
  • 2014-06-13
  • 2015-07-16
  • 2013-08-16
  • 2016-07-10
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
  • 2019-02-09
相关资源
最近更新 更多