【发布时间】:2014-06-21 15:58:54
【问题描述】:
通过使用 PostgreSQL Python 模块 psycopg2,我想查找结束时间在某个时间戳之前的行。我尝试在带有… where end_time < %s 的SQL 查询中使用cursor.execute(…) 来执行此操作,其中%s 替换为带有时区的datetime.datetime 对象。 psycopg2生成的SQL是:
select * from my_table where end_time < '2014-05-01T13:00:00+00:00'::timestamptz;
返回如下一行:
id | start_time | end_time
331 | 2014-05-01 14:55:00 | 2014-05-01 15:05:00
结束时间不早于 2014 年 5 月 1 日 13:00 UTC,与我的预期相反。
在 psycopg2 中执行所需时间选择的正确方法是什么?
【问题讨论】:
-
您确定没有将时间转换为当地时间进行显示吗?
end_time的 UTC 值是多少? -
我知道这些时间是 UTC:
select end_time at time zone 'UTC'…在我引用的返回行中产生2014-05-01 23:05:00+08。 -
@JFSebastian:嗯,我现在明白我没有得到 UTC 值,在我之前的评论中使用
SELECT,而只是要求将无时区时间戳视为 UTC (在我的本地时区显示之前)。 在表中有带时区的时间戳解决了这个问题,你关注时区是对的。
标签: python postgresql datetime timestamp psycopg2