2016-06-21 62 views
0

有沒有辦法讓pyODBC v3.0.10去尋找unixODBC驅動程序,而不是它看起來想要尋找的iODBC驅動程序?pyODBC拒絕尋找unixODBC,而是尋找iODBC

我的理解是pyODBC v3.0.10應該默認執行此操作,而v3.0.7之前的版本需要手動編輯setup.py文件(請參閱參考here)。

還有一個線索,我跑這個代碼列出我的ODBC數據源,並且退回它沒有:

sources = pyodbc.dataSources() 
dsns = list(sources.keys()) 
dsns.sort() 
sl = [] 
for dsn in dsns: 
    sl.append('%s [%s]' % (dsn, sources[dsn])) 
print('\n'.join(sl)) 

而且背景

我一直在努力用創建到MSSQL Server的連接以下設置:pyODBC - > unixODBC - > FreeTDS - > MS SQL。血淋淋的細節記錄在here

我已經把它縮小到一個特定的問題(我認爲):pyODBC軟件包正在尋找iODBC驅動程序,而不是我已經安裝和配置的unixODBC驅動程序。我相信這是因爲當我運行:

import pyodbc 

pyodbc.connect(
    'DRIVER=FreeTDS;' 
    'SERVER=MyServerIP;' 
    'PORT=1433;' 
    'DATABASE= DatabaseName;' 
    'UID=MyUsername;' 
    'PWD=MyPassword') 

我得到這個錯誤,與不找到iODBC的驅動程序的引用:

--------------------------------------------------------------------------- 
Error          Traceback (most recent call last) 
<ipython-input-12-607f0d66e615> in <module>() 
     1 pyodbc.connect(
----> 2  'DRIVER=FreeTDS;' 
     3  'SERVER= MyServerIP;' 
     4  'PORT=1433;' 
     5  'DATABASE= DatabaseName;' 

Error: ('00000', '[00000] [iODBC][Driver Manager]dlopen(FreeTDS, 6): image not found (0) (SQLDriverConnect)') 

感謝您可以擺脫任何光線。

+0

我應該添加兩件事:1)我已經通過終端的isql和tsql命令建立了良好的連接,確認了unixODBC和FreeTDS的良好安裝,以及2)我已經在三個獨立的Mac上覆制了這些結果。 – RJH2

+0

我相信我已經在您的其他問題上回答了這裏:http://stackoverflow.com/questions/37933369/error-connecting-to-ms-sql-server-using-pyodbc-unixodbc-and-freetds-on- a-mac在您的pyodbc.connect()中,您需要將「FreeTDS」替換爲「{FreeTDS}」,並添加「TDS_Version = 7.2」作爲連接參數。 – FlipperPA

+0

謝謝,但給了一個嘗試和相同的錯誤。它似乎沒有評估FreeTDS配置文件(/usr/local/etc/freetds.conf),因爲它似乎並不重要。如果清除整個文件,我會得到相同的錯誤。如上所述,由於某些原因,pyODBC不會查找unixODBC。它甚至從未獲得FreeTDS。 – RJH2

回答

0

這是對我的回答here的轉發,但是這回答了這個問題的更具體的形成。希望我沒有違反任何規則,但是這花了我幾個星期才弄清楚,並且得到了很多人的幫助。所以,如果它是一個重複的Q & A,就這樣吧 - 我們贏了。

好吧,我們解決了它 - 在這個頁面上的很多人的幫助下,我們追逐了很多盲人小巷。

由於(最終)懷疑,它是連接中的pyodbc鏈接。我使用pyodbc v3.0.10,通過從Anaconda軟件包庫下載。解決方案是v.3.0.9。一旦我卸載了v3.0.10,從pypi存儲庫下載了v3.0.9,然後構建並安裝了我自己的conda軟件包......它工作正常。

我採取的步驟如下(注意,這些都是具體到一條蟒蛇環境):

conda uninstall pyodbc 

conda skeleton pypi pyodbc --version 3.0.9 

conda build pyodbc 

conda install pyodbc=3.0.9 --use-local 

一旦我回到我的Jupyter筆記本就跑上面相同的代碼,它創造了一個良好的連接。

我不知道v.3.0.10有什麼問題,或者它只是anaconda.org在其存儲庫中的文件。我已經在pyodbc github頁面上發佈了一些內容,但它看起來並不活躍。

無論如何,謝謝大家的幫助。我希望這能節省一些時間。

1

我相信原因是你可能已編譯pyodbc使用iODBC(或者也許這是默認值)。如果您想確保您針對unixODBC構建pyodbc,則可以按照此處的說明(請參閱http://www.easysoft.com/developer/languages/python/pyodbc.html,標題pyodbc 3.0.x)指定在運行setup.py build之前。或者,請按照此處的說明進行操作:https://code.google.com/archive/p/pyodbc/wikis/Building.wiki

+0

我也有這種懷疑,但無法測試它。我通過'conda install pyodbc'(Anaconda)安裝pyodbc。如果編譯錯誤,我希望很多人會遇到這個問題。爲了測試它,我需要建立一個conda包,我不知道該怎麼做。最後,當我指定FreeTDS驅動程序路徑時,它給了我一個[不同的錯誤](http://stackoverflow.com/questions/37933369/error-connecting-to-ms-sql-server-using-pyodbc-unixodbc-and -freetds-on-a-mac),表明即使它找到unixODBC,仍然存在問題 – RJH2