使用Python的Win32 ODBC模块获取Oracle时间戳
假设你有一个用下面的方式创建的Oracle表:
CREATE TABLE Log(WhenAdded TIMESTAMP(6) WITH TIME ZONE);
我使用Python的ODBC模块,来自它的Win32扩展(来自win32all包),尝试了以下代码:
import dbi, odbc
connection = odbc.odbc("Driver=Oracle in OraHome92;Dbq=SERVER;Uid=USER;Pwd=PASSWD")
cursor = connection.cursor()
cursor.execute("SELECT WhenAdded FROM Log")
results = cursor.fetchall()
当我运行这段代码时,出现了以下问题:
Traceback (most recent call last):
...
results = cursor.fetchall()
dbi.operation-error: [Oracle][ODBC][Ora]ORA-00932: inconsistent datatypes: expected %s got %s
in FETCH
我尝试过的其他数据类型(比如VARCHAR2和BLOB)没有出现这个问题。有没有办法能获取时间戳的数据呢?
2 个回答
1
我对这个问题的解决办法是使用Oracle数据库,把时间戳明确地转换成字符串:
cursor.execute("SELECT TO_CHAR(WhenAdded, 'YYYY-MM-DD HH:MI:SSAM') FROM Log")
这个方法是有效的,但不够通用。我希望能用同一个Python脚本去操作SQL Server数据库,所以像TO_CHAR这样的Oracle特有的解决方案就不适用了。
2
我觉得这是Oracle ODBC驱动程序的一个bug。简单来说,Oracle ODBC驱动程序不支持
在你的例子中,其实你并没有读取时区信息。如果你能控制这个表的话,可以把它转换成普通的