[英]python's psycopg2 package and dbeaver client returning different results when executing the same query. Is this a known issue with psycopg2?
我有一個看起來像這樣的查詢
select count(*)
from table
where created_at<TIMESTAMP '2019-10-18 06:14:33'
在 python 中運行時返回 1262,在 dbeaver 中運行時返回 1118。 正確的數字是 1118。是否有任何原因導致語句的處理方式不同? 這是 psycopg2 的已知錯誤嗎?
有同樣的問題。 我有更復雜的查詢,但問題是一樣的。 DB的細節無關緊要,只要您使用日期進行操作,結果就會不同。 我確定這是關於時區的。 當 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 中定義使用哪個時區時,問題就解決了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.