2017-03-20 59 views
0

我們正在運行 - 紅帽企業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.noarchpyodbc遊標從teradata返回0行

並經由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跟蹤文件表示成功執行但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 ] 

實際上,遊標不會在有效的查詢中返回結果。 任何人都可以對此有所瞭解嗎?

+0

如果在嘗試執行'.fetchall()'之前執行'curs.nextset()',會發生什麼? –

回答

0

這似乎是特定於使用在Linux中,爲此它已經注意到了Teradata的ODBC驅動程序的問題: Python with Teradata ODBC 所以,從源代碼編譯pyodbc似乎已經解決了這個問題。 但是,ODBC驅動程序本身是有限的,因爲它不支持連接池。在pyodbc.pooling爲True的情況下,必須將其設置爲pyodbc.pooling = False,否則會引發以下Pyodbc.connect錯誤: RuntimeError:無法設置SQL_ATTR_CONNECTION_POOLING屬性。