Teradata上的Python pyodbc游标执行失败

时间:2016-12-16 09:25:30

标签: python unix teradata pyodbc

我有一个 Python 脚本,它可以从我的Windows工作站成功运行,我正在尝试将其迁移到 Unix服务器。该脚本使用 pyodbc 包连接到 Teradata 数据库并执行一堆查询。当它从服务器执行时,它会触发以下错误消息:

  

错误:('HY000','驱动程序未提供错误!')

我能够使用服务器上执行的以下代码片段一致地重现错误:

import pyodbc
oConnexion = pyodbc.connect("Driver={Teradata};DBCNAME=myserver;UID=myuser;PWD=mypassword", autocommit=True)
print("Connected")
oCursor = oConnexion.cursor()
oCursor.execute("select 1")
print("Success")

配置:

  • Python 3.5.2
  • Pyodbc 3.1.2b2
  • UnixODBC驱动程序管理器
  • Teradata 15.10

启用ODBC日志记录并运行简单的SELECT查询后,我注意到以下无效游标 GeTypeInfo 错误:

Data Type = SQL_VARCHAR
[ODBC][57920][1481847636.278776][SQLGetTypeInfo.c][190]Error: 24000
[ODBC][57920][1481847636.278815][SQLGetTypeInfo.c][168]
                Entry:
                        Statement = 0x1bc69e0
                        Data Type = Unknown(-9)
[ODBC][57920][1481847636.278839][SQLGetTypeInfo.c][190]Error: 24000
[ODBC][57920][1481847636.278873][SQLGetTypeInfo.c][168]
                Entry:
                        Statement = 0x1bc69e0
                        Data Type = SQL_BINARY
[ODBC][57920][1481847636.278896][SQLGetTypeInfo.c][190]Error: 24000

此外,尝试使用以下代码列出连接属性:

for attr in vars(pyodbc):
        print (attr)
        value = oConnexion.getinfo(getattr(pyodbc, attr))
        print('{:<40s} | {}'.format(attr, value))

失败:

SQL_DESCRIBE_PARAMETER
Traceback (most recent call last):
  File "test.py", line 28, in <module>
    value = oConnexion.getinfo(getattr(pyodbc, attr))
pyodbc.Error: ('IM001', '[IM001] [unixODBC][Driver Manager]Driver does not support this function (0) (SQLGetInfo)')

1 个答案:

答案 0 :(得分:0)

升级到pyodbc(v4)的最后一个(未发布)版本解决了这个问题。 https://github.com/mkleehammer/pyodbc/tree/v4