从cx_oracle游标检索时区识别日期时间对象的正确方法是什么?

问题描述

| cx_oracle为
TIMESTAMP
TIMESTAMP WITH TIME ZONE
类型的列返回
datetime
实例,但是这些datetime实例不支持时区。 例如:
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 datetime对象。然而:
>>> cxoracle_cursor.execute(\"select mycol from mytable\")
>>> row = cx_oracle_cursor.fetchone()
>>> row[\'mycol\']
datetime.datetime(2011,6,15,8,30)
该datetime对象不支持时区,因此我无法在应用程序中可靠地使用该日期。 将此列作为可识别时区的datetime对象检索的最佳方法是什么?     

解决方法

在这里,我看到以下内容:对于TIMESTAMP WITH TIME ZONE数据,datetime值始终为UTC,因此无需进行转换。 因此,如果您不知道“ 0”对象时区,则表示它是UTC。因此,您可以执行以下操作:
dt = pytz.utc.localize(row[\'mycol\'])
或尝试使用功能
SYS_EXTRACT_UTC
(从具有时区偏移量的日期时间中提取UTC),然后再使用
pytz.utc.localize
。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...