pyodbc游标从teradata返回0行

时间:2017-03-20 11:13:37

标签: python odbc teradata pyodbc

我们正在运行 - 红帽企业Linux服务器版本7.2(Maipo),带有Teradata rpms: - tdodbc1510-15.10.01.05-1.noarch - TeraGSS_linux_x64-15.10.04.02-1.noarch - tdicu1510-15.10.01.02-1.noarch

通过pyodbc(3.0.10)与Python 3.6连接,如下所示:

>>> import pyodbc
>>> conn = pyodbc.connect('DSN=devdb;UID=xxx;PWD=xxx')
>>> curs = conn.execute('\nselect user as me')
>>> len(curs.fetchall())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
pyodbc.ProgrammingError: No results.  Previous SQL was not a query.

odbc tracefile表示成功执行,但SQLRowCount = 0:

2759   1 TS:201920:[139723593647936] SQLExecDirect returns SQL_SUCCESS   [ execute.cpp 542 ]
2760     TS:201920:[139723593647936] SQLRowCount(hstmt5, pcrow) -->    [ results.cpp 3165 ]
2761   1 TS:201920:[139723593647936] SQLRowCount() = 0   [ results.cpp 3212 ]
2762     TS:201920:[139723593647936] SQLNumResultCols(hstmt5, pccol)    [ results.cpp 210 ]
2763   1 TS:201920:[139723593647936] SQLNumResultCols ()   [ results.cpp 224 ]
2764   1 TS:201920:[139723593647936]   --> 0    [ results.cpp 248 ]
2765   1 TS:201920:[139723593647936] SQLNumResultCols returns SQL_SUCCESS   [ results.cpp 251 ]

实际上,游标在有效查询中不返回任何结果。 任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:0)

这似乎是在Linux机器上使用Teradata的ODBC驱动程序特有的问题,已经注意到了这一点: Python with Teradata ODBC 因此,从源代码编译pyodbc似乎已经解决了这个问题。 但是,ODBC驱动程序本身是有限的,因为它不支持连接池。如果pyodbc.pooling为True,则必须将其设置为pyodbc.pooling = False,否则会引发pyodbc.connect的以下错误: RuntimeError:无法设置SQL_ATTR_CONNECTION_POOLING属性。