2016-01-14 113 views
13

我是Linux新手,我想從Python中查詢Microsoft SQL Server。我在Windows上使用它,這非常好,但在Linux中,這是非常痛苦的。PyODBC:即使它存在也無法打開驅動程序

幾個小時後,我終於成功地在unixODBC的Linux Mint上安裝了Microsoft ODBC驅動程序。

然後,我用python 3環境設置anaconda。

然後我做到這一點:

import pyodbc as odbc 

sql_PIM = odbc.connect("Driver={ODBC Driver 13 for SQL Server};Server=XXX;Database=YYY;Trusted_Connection=Yes") 

它返回:

('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0' : file not found (0) (SQLDriverConnect)") 

我不undertsand的事情是,PyODBC似乎讀ODBCINST.INI正確的文件路徑,仍然無法正常工作。

我去了「/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0」,該文件實際存在!

那爲什麼它告訴我它不存在? 下面是一些可能的線索:

  • 我在一個虛擬環境
  • 我需要有「讀取」權限,因爲它是一個根文件路徑

我不知道如何可以解決這些問題。

謝謝!

+0

它可能是缺少的庫(由libmsodbcsql-13.0.so.0.0使用的庫)或LD_LIBRARY_PATH問題。你能分享下面的命令的結果嗎? 'ldd/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0' – mauro

+0

相關:[用於SQL Server的ODBC驅動程序13無法在pyodbc上打開lib](https://stackoverflow.com/q/41182415/ 55075)。 – kenorb

回答

12

在遵循微軟教程SQL Server Linux ODBC Driver之後,我在Ubuntu 14上也遇到了同樣的問題。

文件存在和運行的LDD之後,這表明有依賴丟失:

/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0:/ usr/lib中/ x86_64的,Linux的GNU /的libstdC++ so.6:版本GLIBCXX_3.4.20' not found (required by /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0) /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version CXXABI_1.3.8' 未找到(由

需要尋找了一會兒後我發現它的,因爲Ubuntu的回購沒有必須GLIBCXX在3.4.20版本,它是在3.4.19。

然後,我添加了一個回購Ubuntu,更新它並強制它升級libstdC++ 6

sudo add-apt-repository ppa:ubuntu-toolchain-r/test 
sudo apt-get update 
sudo apt-get upgrade 
sudo apt-get install libstdc++6 

問題解決了,用ISQL測試:

+---------------------------------------+ 
| Connected!       | 
|          | 
| sql-statement       | 
| help [tablename]      | 
| quit         | 
|          | 
+---------------------------------------+ 
SQL> 

後,使用PDO_ODBC(PHP)我試圖測試,它然後給了我找不到錯誤相同的驅動程序。 爲了解決這個問題,我不得不創建一個符號鏈接來解決libodbcinst.so.2

sudo ln -s /usr/lib64/libodbcinst.so.2 /lib/x86_64-linux-gnu/libodbcinst.so.2 
+0

謝謝,我也提供他的解決方案。比我的數據庫連接有問題,但這是另一回事。 ! –

4

我發現,我here問題的解答。這是爲python 2.7(所以可能不適用於那些正在尋找python 3.x解決方案的人)。

建議的解決方案是更新libgcc:4.8.5-2 - > 5.2。0-0

爲了更新libgcc中,使用這個命令

conda update libgcc 
+0

如果你遵循這個鏈接,你會得到nehalijwani的答案,完美地重新產生問題,並解釋爲什麼更新libgcc修復它。總結一下:pyodbc.so需要libstdC++。so。該文件存在於conda中,因此它使用該版本,而不是系統版本。不幸的是,缺省情況下,libmsodbc.sql需要比conda安裝更新的版本。因此,更新conda libgcc允許對conda版本的本地引用起作用。 –

1

我有同樣的問題'未找到文件(0)(的SQLDriverConnect)'上MAC OS用下面的代碼

cnxn = pyodbc.connect( 'DRIVER = {ODBC用於SQL Server驅動程序13}; SERVER = myServerIP,1433; DATABASE = myDBName; UID = SA; PWD = DBPASSWORD')

google搜索了兩天後,我無法修復該問題甚至修改freetds.conf,ODBCINST.INI和ODBC.INI

最後,我通過更換DRIVER值找到了解決辦法

cnxn = pyodbc.connect( 'DRIVER = {的/ usr /本地/ LIB/libmsodbcsql.13.dylib}; SERVER = myServerIP,1433; DATABASE = myDBName; UID = SA; PWD = DBPASSWORD')

我的開發環境

  • MAC OS EI Capitan的
  • 蟒蛇3.6.1 Anconda
0

有同樣的問題一次.. 1.try暢達libgcc的更新(這是因爲通過安裝pyodbc點子和暢達尋找不同版本的文件的..)..這可能已經固定..... 鏈接:https://github.com/ContinuumIO/anaconda-issues/issues/1639 找nehaljwani答案。

2.also檢查ODBC文件正確的版本號/etc/odbcinst.ini和/etc/odbc.ini ...名稱應該匹配,並且還駕駛路徑。

1

以下建議可能有助於解決問題:

相關問題