python - 使用 Python 的 Win32 ODBC 模块检索 Oracle 时间戳

标签 python oracle ora-00932

给定使用以下内容创建的 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/

相关文章:

sql - Oracle - 为每个唯一的列值生成唯一的行并将行转换为列

c++ - Oracle Golden Gate 用户导出 - EXIT_CALL_PROCESS_RECORD 未通过

c# - 如何将参数传递给 IN 运算符?

php - 从 PHP 调用 Oracle 包中存在的函数/过程

python - 如何检查列表的多个元素是否等于变量?

python - 如何将 jinja2 变量插入到 html 元素的属性中?

python - 如何使用正则表达式删除转义序列(例如\"escaped string\")?

oracle - 如何使用 FailOver 为 ODP.NET 连接字符串配置连接字符串?

sql - 连接语句中的错误 "ORA-00932: inconsistent datatypes: expected - got BLOB"

python - 在 Django Rest Framework 中序列化相关模型