4
我安裝了Hortonworks Hive ODBC驅動程序並在數據源中創建了一個連接。我測試了它,併成功運行。Python連接到Hive
我安裝PyODBC並寫了下面的代碼
import os, sys, pyodbc;
con = pyodbc.connect("DSN=MyCon")
我有錯誤
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
pyodbc.Error: ('HYC00', '[HYC00] [Hortonworks][ODBC] (11470) Transactions are not supported. (11470) (SQLSetConnnectAttr(SQL_ATTR_AUTOCOMMIT))')
我也試過
import pyodbc, sys, os
pyodbc.pooling = False
pyodbc.autocommit = False
con = pyodbc.connect("DSN=MyCon")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
pyodbc.Error: ('HYC00', '[HYC00] [Hortonworks][ODBC] (11470) Transactions are not supported. (11470) (SQLSetConnnectAttr(SQL_ATTR_AUTOCOMMIT))')
也試過
con = pyodbc.connect("DSN=Tenet", autocommit=False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
pyodbc.Error: ('HYC00', '[HYC00] [Hortonworks][ODBC] (11470) Transactions are not supported. (11470) (SQLSetConnnectAttr(SQL_ATTR_AUTOCOMMIT))')
稍微澄清,你實際上並沒有關閉自動提交,你指定pyodbc保持自動提交。 ODBC說autocommit應該默認打開,Python說它應該關閉,所以pyodbc會嘗試關閉自動提交作爲第一步。當驅動程序/數據庫不支持交易(如Hive)時,這會失敗,這就是您遇到此錯誤的原因。告訴pyodbc它應該保持自動提交意味着它不會讓調用將自動提交關閉到驅動程序,然後所有東西都按照它應該的那樣工作。 – KylePorter
感謝凱爾......現在完全有道理。我認爲線程中也提到了同樣的事情......但是你解釋得好一點。 –