簡體   English   中英

python 的 psycopg2 包和 dbeaver 客戶端在執行相同的查詢時返回不同的結果。 這是 psycopg2 的已知問題嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM