use*_*088 4 python django django-models
我正在尝试按月和年过滤日期时间字段。由于某些未知原因,在输入月份和年份时,我返回一个空集。
模型:
class SomePost(model.Models):
timestamp = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
询问:
p = SomePost.objects.filter(timestamp__year=2014, timestamp__month=1)
Run Code Online (Sandbox Code Playgroud)
我认为这与月份有关,但我看不出我做错了什么。
好的,所以我将模型日期时间字段转换为日期字段并且查询有效。
生成的 sql 是这样的:
SELECT
`a_post`.`id`,
`a_post`.`title`,
`a_post`.`slug`,
`a_post`.`text`,
`a_post`.`timestamp`,
`a_post`.`published` FROM `a_post`
WHERE EXTRACT(MONTH FROM `a_post`.`timestamp`) = 2
ORDER BY `a_post`.`timestamp` DESC;
Run Code Online (Sandbox Code Playgroud)
但是当我将它转换回日期时间字段时,sql 是:
SELECT
`a_post`.`id`,
`a_post`.`title`,
`a_post`.`slug`,
`a_post`.`text`,
`a_post`.`timestamp`,
`a_post`.`published` FROM `a_post`
WHERE EXTRACT(MONTH FROM CONVERT_TZ(`a_post`.`timestamp`, 'UTC', UTC)) = 1
ORDER BY `a_post`.`timestamp` DESC
Run Code Online (Sandbox Code Playgroud)
看起来好像是 conver_tz 导致了这个问题。如果我在查询返回结果时删除 convert_tz 函数。
关于这里发生了什么的任何想法?
小智 7
我有同样的问题,这对我有用,我希望它对你有用。
在 Django-1.11.5 上测试
p = SomePost.objects.filter(timestamp__year='2014').filter(timestamp__month='1')
Run Code Online (Sandbox Code Playgroud)
可在此处获得更多信息
小智 -1
我在 中遇到了同样的问题MySQL Ver 14.14 Distrib 5.6.33。
这是由空时区表引起的。我通过填充它们来修复它:
shell> mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
Run Code Online (Sandbox Code Playgroud)
阅读MySQL CONVERT_TZ()上的答案很有用。
| 归档时间: |
|
| 查看次数: |
11163 次 |
| 最近记录: |