Open
Description
-
What versions are you using?
3.1.1, db version doesn't seem relevant -
Is it an error or a hang or a crash?
Unexpected tz conversion.
From the source code I think this might be in Arrow spaceseems to be a decision in the bridge code, but the outcome is very confusing. -
What error(s) or behavior you are seeing?
When fetching DATE/TIMESTAMP, the Arrow values are casted transparently to UTC.
This is inconsistent with regular cursor fetch. -
Does your application call init_oracle_client()?
Occurs in both thick and thin mode.
Also seems to ignore sessionTIME_ZONE
. -
Include a runnable Python script that shows the problem.
# I'm at America/Los_Angeles that is currently UTC-7
import oracledb
import pyarrow as pa
SQL = "select * from t_ts"
conn = oracledb.connect("...")
cursor = conn.cursor()
try:
cursor.execute("drop table t_ts")
except Exception:
pass
cursor.execute(
"create table t_ts as select sysdate d1, trunc(sysdate) d2, systimestamp t1 from dual"
)
print(cursor.execute(SQL).fetchall())
# clean values as-is
# [
# (datetime.datetime(2025, 5, 28, 11, 1, 11),
# datetime.datetime(2025, 5, 28, 0, 0),
# datetime.datetime(2025, 5, 28, 11, 1, 11, 875060)
# )]
odf = conn.fetch_df_all(SQL)
print(pa.Table.from_arrays(odf.column_arrays(), names=odf.column_names()))
# values below are TZ adjusted
# pyarrow.Table
# D1: timestamp[s]
# D2: timestamp[s]
# T1: timestamp[us]
# ----
# D1: [[2025-05-28 18:01:11]]
# D2: [[2025-05-28 07:00:00]]
# T1: [[2025-05-28 18:01:11.875060]]