Linux python3 - 无法打开 lib 'SQL Server'

问题描述 投票:0回答:8

我正在尝试连接到 Microsoft Azure SQL 服务器数据库。

这就是我尝试连接的方式:

 conn = pyodbc.connect('DRIVER={SQL Server};SERVER=%s' % (self.config.get("Sql", "DataSource")),
                        user= self.config.get("Sql", "UserId"),
                        password=self.config.get("Sql", "Password"),
                        database=self.config.get("Sql", "Catalog"))

执行此行时出现错误。错误:

pyodbc.Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'SQL Server' : file not found (0) (SQLDriverConnect)")

不明白为什么会发生这种情况,有什么想法吗?

sql-server linux python-3.x azure azure-sql-database
8个回答
47
投票

DRIVER={SQL Server}
替换为
DRIVER={/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.0.so.1.1}


32
投票

更新 - 2022 年 12 月

ODBC 驱动程序的当前安装说明位于此处


我还建议您安装 ODBC 驱动程序,然后尝试使用 pyodbc。我假设您使用的是 Ubuntu 15.04+ 机器。

要安装 ODBC 驱动程序,请按照以下说明操作:

sudo su
wget https://gallery.technet.microsoft.com/ODBC-Driver-13-for-Ubuntu-b87369f0/file/154097/2/installodbc.sh
sh installodbc.sh

完成后,使用 pip 安装 pyodbc 并尝试以下脚本:

import pyodbc
server = 'tcp:myserver.database.windows.net'
database = 'mydb'
username = 'myusername'
password = 'mypassword'
cnxn = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()
cursor.execute("SELECT @@version;")
row = cursor.fetchone()
while row:
    print row
    row = cursor.fetchone()

让我知道进展如何。

干杯,
见面


14
投票

下载依赖项取决于您的平台, (对于其他操作系统下载您的依赖项

此示例适用于 Ubuntu:

# sudo su 
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -

#Download appropriate package for the OS version
#Choose only ONE of the following, corresponding to your OS version

#Ubuntu 14.04
# curl https://packages.microsoft.com/config/ubuntu/14.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

#Ubuntu 16.04
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

# #Ubuntu 18.04
# curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

# #Ubuntu 18.10
# curl https://packages.microsoft.com/config/ubuntu/18.10/prod.list > /etc/apt/sources.list.d/mssql-release.list

# #Ubuntu 19.04
# curl https://packages.microsoft.com/config/ubuntu/19.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

exit
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install msodbcsql17
# optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y apt-get install mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo apt-get install unixodbc-dev

然后改变,

DRIVER={/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.0.so.1.1} 

DRIVER={ODBC Driver 17 for SQL Server}

1
投票

检查这些链接。它解决了我的类似问题。

安装FreeTDS

使用 FreeTDS 连接到 SQL-Azure


1
投票

如果您使用的是离线 REHL 服务器,请按照以下方法设置与 Microsoft SQL Server 的连接。

根据您的 REHL 版本,从

https://packages.microsoft.com/rhel/
下载 UNIXODBC 和 MSSQLTools 包,例如 unixODBC-2.3.7-1.rh.x86_64.rpm/mssql-tools-17.9.1.1-1.x86_64.rpm

通过winscp或任何ssh客户端将下载的文件放置在REHL服务器上。

按如下顺序安装这两个文件:

yum localinstall unixODBC-2.3.7-1.rh.x86_64.rpm
yum localinstall mssql-tools-17.9.1.1-1.x86_64.rpm)

转到安装文件夹,然后复制路径,如所示,

/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.9.so.1.1

将此路径放入代码中:

driverpath = r"/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.9.so.1.1"

你的问题将会得到解决。


0
投票

我看到这篇文章有一个已接受的答案,但它对我在 Ubuntu 20.04 上运行 Python 3.8 不起作用。我尝试了几件事,但我认为最终这是一个与 openSSL 包有关的安全问题。这是我推荐的步骤。

检查openSSL版本。在 Linux 控制台中执行此操作

openssl version

我的系统上有问题的版本是 1.1.1f。如果这是您拥有的版本,请使用这些命令更新它

wget https://www.openssl.org/source/openssl-1.1.1p.tar.gz -O openssl-1.1.1p.tar.gz
tar -zxvf openssl-1.1.1p.tar.gz
cd openssl-1.1.1p
./config
make
sudo make install
sudo ldconfig
openssl version

然后你必须编辑/etc/ssl/openssl.cnf。把这个放在开头

openssl_conf = default_conf

最后是这个

[ default_conf ]

ssl_conf = ssl_sect

[ssl_sect]

system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT:@SECLEVEL=0

就像我说的,这对我有用。希望它也能帮助别人。


0
投票

您好,我正在使用此代码片段,它会搜索并返回 ODBC 驱动程序的最新可用版本,否则会引发错误:

def select_driver():
    """Find least version of: ODBC Driver for SQL Server."""
    drv = sorted([drv for drv in pyodbc.drivers() if "ODBC Driver " in drv and " for SQL Server" in drv])
    if len(drv) == 0:
        raise Exception("No 'ODBC Driver XX for SQL Server' found.")
    return drv[-1]

print(select_driver())  # ODBC Driver 17 for SQL Server

0
投票

适用于 ubuntu 23.04 以上版本。我的是 ubuntu 23.10,这有效

首先检查你的ubuntu版本:

lsb_release -a

并使用这个 shell 文件并运行它:

curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc

curl https://packages.microsoft.com/config/ubuntu/23.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list

sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18
# optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo apt-get install -y unixodbc-dev

将内容保存在名为 setup_mssql.sh 的文件中,并通过在命令中键入此命令来运行它。

 ./setup_mssql.sh 

然后将连接字符串替换为“driver”:

"{ODBC Driver 18 for SQL Server}"

© www.soinside.com 2019 - 2024. All rights reserved.