PyODBC:即使它存在也无法打开驱动程序
我是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”,该文件实际存在!
那为什么它告诉我它不存在? 下面是一些可能的线索:
- 我在一个虚拟环境
- 我需要有“读取”权限,因为它是一个根文件路径
我不知道如何可以解决这些问题。
谢谢!
在遵循微软教程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
谢谢,我也提供他的解决方案。比我的数据库连接有问题,但这是另一回事。 ! –
我发现,我here问题的解答。这是为python 2.7(所以可能不适用于那些正在寻找python 3.x解决方案的人)。
建议的解决方案是更新libgcc:4.8.5-2 - > 5.2。0-0
为了更新libgcc中,使用这个命令
conda update libgcc
如果你遵循这个链接,你会得到nehalijwani的答案,完美地重新产生问题,并解释为什么更新libgcc修复它。总结一下:pyodbc.so需要libstdC++。so。该文件存在于conda中,因此它使用该版本,而不是系统版本。不幸的是,缺省情况下,libmsodbc.sql需要比conda安装更新的版本。因此,更新conda libgcc允许对conda版本的本地引用起作用。 –
我有同样的问题'未找到文件(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
有同样的问题一次.. 1.try畅达libgcc的更新(这是因为通过安装pyodbc点子和畅达寻找不同版本的文件的..)..这可能已经固定..... 链接:https://github.com/ContinuumIO/anaconda-issues/issues/1639 找nehaljwani答案。
2.also检查ODBC文件正确的版本号/etc/odbcinst.ini和/etc/odbc.ini ...名称应该匹配,并且还驾驶路径。
以下建议可能有助于解决问题:
- 确保驱动器的配置INI文件存在
odbcinst -j
(检查odbcinst.ini
)。 - 确保文件路径来配置的驱动程序从您的INI文件(运行:
odbcinst -j
)存在并已阅读和可执行权限标志(O_RDONLY|O_CLOEXEC
)。 -
如果您仍然有找不到文件错误,尽管该文件存在,问题可能按nehaljwani's GitHub comment涉及到
libgcc
版本不匹配。解决方案是通过运行conda update libgcc
命令更新您的libgcc
。相关:ODBC Driver 13 for SQL Server can't open lib on pyodbc while connecting on AWS E2 ubuntu instance。
适用于MacOS,请参阅:Installing ODBC via HomeBrew。
它可能是缺少的库(由libmsodbcsql-13.0.so.0.0使用的库)或LD_LIBRARY_PATH问题。你能分享下面的命令的结果吗? 'ldd/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0' – mauro
相关:[用于SQL Server的ODBC驱动程序13无法在pyodbc上打开lib](https://stackoverflow.com/q/41182415/ 55075)。 – kenorb