python - python 的 psycopg2 包和 dbeaver 客户端在执行相同的查询时返回不同的结果。这是 psycopg2 的已知问题吗?
问题描述
我有一个看起来像这样的查询
select count(*)
from table
where created_at<TIMESTAMP '2019-10-18 06:14:33'
在 python 中运行时返回 1262,在 dbeaver 中运行时返回 1118。正确的数字是 1118。是否有任何原因导致对语句的处理方式不同?这是 psycopg2 的已知错误吗?
解决方案
有同样的问题。我有更复杂的查询,但问题是一样的。数据库的细节无关紧要,只要您使用日期操作就足够了,结果会有所不同。我确定这是关于时区的。当 Python 试图执行时,他以某种方式将其转换为与客户端不同的时区
这里提出了类似的问题:python 脚本不断将日期转换为 utc
更新:所以问题已经解决了您应该在双方都定义要使用的时区。当您将 PosgreSQL 客户端用作 DBeaver 时,他使用的是定义的 DB 时区
SELECT *
FROM pg_timezone_names
WHERE name = current_setting('TIMEZONE');
所以这简化了我的查询:
select count(id)
from realestates_realestate
where create_date::date = now()::date – 1
应该是这样的:
select count(id)
from realestates_realestate
where (create_date AT TIME ZONE 'CET')::date = (now() AT TIME ZONE 'CET')::date – 1
在这种情况下,结果将是相同的,因为 Python 在不同的时区执行查询(在我看来,在 UTC 时区)。当您在 SQL 中定义使用哪个时区时,问题就解决了。
推荐阅读
- java - 双散列哈希表重新散列问题
- java - Java Selenium 没有这样的元素:无法找到元素
- facebook - 为什么我的 facebook messenger bot 帖子上的正文总是空的?
- python-3.6 - Python中的约瑟夫斯for循环
- api - HomeAway (vrbo.com) API 授权与 Oath
- cmake - CMake 顶级配置子模块
- office365 - Office 365 多地理位置设置,如何了解用户所属的区域。
- reactjs - 获取 Unix 格式的 Flatpickr 时间数据
- highcharts - Highcharts 月 xAxis 在二月列之后的空间不均匀
- java - 数据为空时分页不更新 ZK