Python pyodbc 游标在 Teradata 上执行失败
Python pyodbc cursor execution fails on Teradata
我有一个 Python 脚本可以从我的 Windows 工作站成功运行,我正在尝试将它迁移到 Unix服务器。该脚本使用 pyodbc 包连接到 Teradata 数据库并执行一系列查询。从服务器执行时,会触发以下错误消息:
Error: ('HY000', 'The driver did not supply an error!')
我能够通过在服务器上执行以下代码片段来始终如一地重现错误:
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 驱动程序管理器
- 天睿数据 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)')
升级到最新(未发布)版本的 pyodbc (v4) 解决了这个问题。
https://github.com/mkleehammer/pyodbc/tree/v4
我有一个 Python 脚本可以从我的 Windows 工作站成功运行,我正在尝试将它迁移到 Unix服务器。该脚本使用 pyodbc 包连接到 Teradata 数据库并执行一系列查询。从服务器执行时,会触发以下错误消息:
Error: ('HY000', 'The driver did not supply an error!')
我能够通过在服务器上执行以下代码片段来始终如一地重现错误:
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 驱动程序管理器
- 天睿数据 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)')
升级到最新(未发布)版本的 pyodbc (v4) 解决了这个问题。 https://github.com/mkleehammer/pyodbc/tree/v4