给定使用以下内容创建的 Oracle 表:
CREATE TABLE Log(WhenAdded TIMESTAMP(6) WITH TIME ZONE);
使用其 Win32 extensions 中的 Python ODBC 模块(来自 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)不会导致这个问题。有没有办法检索时间戳?
最佳答案
我认为这是 Oracle ODBC 驱动程序中的错误。基本上,Oracle ODBC 驱动程序不支持 TIMESTAMP WITH (LOCAL) TIME ZONE
数据类型,仅支持 TIMESTAMP
数据类型。正如您所发现的,一种解决方法实际上是使用 TO_CHAR
方法。
在您的示例中,您实际上并未阅读时区信息。如果您可以控制该表,则可以将其转换为直接的 TIMESTAMP
列。如果您无法控制表,另一种解决方案可能是创建一个 View ,通过字符串将 TIMESTAMP WITH TIME ZONE
转换为 TIMESTAMP
- 抱歉,我不知道不知道是否有办法直接从 TIMESTAMP WITH TIME ZONE
转换为 TIMESTAMP
。
关于python - 使用 Python 的 Win32 ODBC 模块检索 Oracle 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38435/