2015-04-16 140 views
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))') 

回答

9

我解決了這個問題.....我不刪除我的問題,並把答案在這裏

pyodbc.autocommit = True 
con = pyodbc.connect("DSN=MyCon", autocommit=True) 

此基礎上,這個建議做閱讀

https://code.google.com/p/pyodbc/issues/detail?id=162

**感謝從下面的凱爾波特的建議......現在完全有道理**

+2

稍微澄清,你實際上並沒有關閉自動提交,你指定pyodbc保持自動提交。 ODBC說autocommit應該默認打開,Python說它應該關閉,所以pyodbc會嘗試關閉自動提交作爲第一步。當驅動程序/數據庫不支持交易(如Hive)時,這會失敗,這就是您遇到此錯誤的原因。告訴pyodbc它應該保持自動提交意味着它不會讓調用將自動提交關閉到驅動程序,然後所有東西都按照它應該的那樣工作。 – KylePorter

+0

感謝凱爾......現在完全有道理。我認爲線程中也提到了同樣的事情......但是你解釋得好一點。 –