我正在尝试连接到 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)")
不明白为什么会发生这种情况,有什么想法吗?
将
DRIVER={SQL Server}
替换为 DRIVER={/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.0.so.1.1}
更新 - 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()
让我知道进展如何。
干杯,
见面
下载依赖项取决于您的平台, (对于其他操作系统下载您的依赖项)
此示例适用于 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}
如果您使用的是离线 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"
你的问题将会得到解决。
我看到这篇文章有一个已接受的答案,但它对我在 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
就像我说的,这对我有用。希望它也能帮助别人。
您好,我正在使用此代码片段,它会搜索并返回 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
适用于 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}"