cx_oracle为datetime
或TIMESTAMP
类型的列返回TIMESTAMP WITH TIME ZONE
个实例,但这些日期时间实例不支持时区。
例如:
SELECT column_name, data_type FROM ALL_TAB_COLUMNS WHERE table_name = 'mytable';
column_name data_type
----------- ---------------------------
MYCOL TIMESTAMP(6) WITH TIME ZONE
正如您所看到的,MYCOL是一个时区感知的TIMESTAMP。我希望以下内容将返回包含tzinfo数据的Python日期时间对象。但是:
>>> cxoracle_cursor.execute("select mycol from mytable")
>>> row = cx_oracle_cursor.fetchone()
>>> row['mycol']
datetime.datetime(2011, 6, 15, 8, 30)
该datetime对象不支持时区,因此我无法在我的应用程序中可靠地使用此日期。
将此列检索为时区感知的日期时间对象的最佳方法是什么?
答案 0 :(得分:3)
Here我看到以下内容:对于TIMESTAMP WITH TIME ZONE数据,日期时间值始终为UTC,因此无需转换。
因此,如果您没有意识到datetime
对象时区,我理解它是UTC。所以你可以这样做:
dt = pytz.utc.localize(row['mycol'])
或尝试使用SYS_EXTRACT_UTC
函数(从具有时区偏移的日期时间中提取UTC),然后使用pytz.utc.localize
。