我是linux世界的新手,我想从Python查询Microsoft SQL Server。我在Windows上使用它,它非常好,但在Linux中它非常痛苦。
几个小时后,我终于成功使用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)")
我不遗憾的是,PyODBC似乎从odbcinst.ini读取了正确的文件路径,但仍然不起作用。
我去了" /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0"并且文件确实存在!
那为什么它告诉我它不存在? 以下是一些可能的线索:
我不知道如何解决这些问题。
谢谢!
答案 0 :(得分:14)
在关注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:version 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添加了一个repo,更新了它并强制它升级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
答案 1 :(得分:4)
我找到了一个适合我的答案here。这是针对python 2.7的(因此对于那些正在寻找python 3.x解决方案的人来说可能不适用。)
建议的解决方案是更新libgcc:4.8.5-2 - > 5.2.0-0
要更新libgcc,请使用此命令
conda update libgcc
答案 2 :(得分:2)
我在MAC OS上遇到同样的问题'文件未找到(0)(SQLDriverConnect)',代码如下
谷歌搜索了两天之后,即使修改了freetds.conf,odbcinst.ini和odbc.ini,也无法解决问题cnxn = pyodbc.connect(' DRIVER = {用于SQL Server的ODBC驱动程序13} ; SERVER = myServerIP,1433; DATABASE = myDBName; UID = sa; PWD = dbPassword')
最后,我通过替换 DRIVER 值
找到了解决方案cnxn = pyodbc.connect( '的 DRIVER = {的/ usr /本地/ LIB / libmsodbcsql.13.dylib} 强>; SERVER = myServerIP,1433; DATABASE = myDBName; UID = SA; PWD = DBPASSWORD')
我的开发环境
答案 3 :(得分:1)
以下建议可能有助于解决问题:
odbcinst -j
(请检查odbcinst.ini
)。odbcinst -j
)的已配置驱动程序的文件路径,并具有读取和可执行权限标记(O_RDONLY|O_CLOEXEC
)。如果您仍然找不到文件错误,尽管文件存在,但问题可能与libgcc
版本不匹配有关nehaljwani's GitHub comment。解决方案是通过运行libgcc
命令来更新conda update 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。
答案 4 :(得分:1)
也许有点晚了,但我留下了适合我的脚本。
我的问题与你的问题相同,我测试了所有选项,例如更改驱动程序位置,创建符号链接,修改/etc/*.ini文件等等......没有任何效果。
我的问题,在alpine的docker容器中运行python 3.6,pyodbc包是库 libssl1.0.0
您可以在此处使用驱动程序v13
找到my installation script for pyodbc Debian 8 (alpine) docker imageDRIVER = {SQL Server的ODBC驱动程序13}
我为数据库连接运行的命令是:
import pyodbc
connection_string = 'DRIVER={ODBC Driver 13 for SQL Server};'
connection_string += 'SERVER={0};DATABASE={1};UID={2};PWD={3};'.format(host,dbname,user,pwd)
connection = pyodbc.connect(connection_string)
答案 5 :(得分:1)
我在安装libssl1.0.0之后解决了这个问题。
首先,我以这种方式设置我的连接字符串:
cnxn = pyodbc.connect('DRIVER={/usr/local/lib/libmsodbcsql.13.dylib};
SERVER=myServerIP,1433;DATABASE=myDBName;UID=sa;PWD=dbPassword')
然后,我安装了libssl1.0.0:
echo "deb http://security.debian.org/debian-security jessie/updates main" >> /etc/apt/sources.list
apt-get install libssl1.0.0
最后,我设置了语言环境:
apt-get -y install locales
echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
完成这些步骤后,我的python模块能够找到并连接到数据库。
答案 6 :(得分:0)
曾经有同样的问题.. 1.try conda update libgcc(这是因为通过pip和conda安装的pyodbc查找文件的不同版本..)..这可能已经修复..... 链接:https://github.com/ContinuumIO/anaconda-issues/issues/1639 寻找nehaljwani答案。
2.还要在/etc/odbcinst.ini和/etc/odbc.ini中正确检查odbc文件的版本号...名称应该匹配,还有驱动程序路径。