使用putty私钥、sqlalchemy和pyodbc从linux环境连接到sql server

nsk*_*nsk 17 python sql-server ubuntu pyodbc

您好,我正在尝试从 linux(ubuntu 服务器)的 sql 服务器读取数据帧。文件(gscm.ppk)中有管理密钥

我使用以下格式连接到 sql server:

import urllib.parse
import pandas as pd
import sqlalchemy as sa

params = urllib.parse.quote_plus(
    "DRIVER={SQL Server Native Client 11.0};"
    "SERVER=dagger;"
    "DATABASE=test;"
    "UID=ubuntu;"
)
engine = sa.create_engine("mssql+pyodbc:///?odbc_connect={}".format(params))
df = pd.read_sql("SELECT * FROM ROBALS", engine)

Run Code Online (Sandbox Code Playgroud)

我不断收到此错误:

sqlalchemy.exc.DBAPIError: (pyodbc.Error) ('01000', "[01000] [unixODBC] 
[Driver Manager]Can't open lib 'SQL Server' : file not found (0) 
(SQLDriverConnect)")
(Background on this error at: https://sqlalche.me/e/14/dbapi)
Run Code Online (Sandbox Code Playgroud)

我已经下载了Ubuntu 20.04附带的驱动程序

小智 0

您的代码看起来大部分都很好,只是Driver参数看起来被忽略/不太正确。我无法判断它是否与代码中的空白有关,但如果我在我的实例上运行此代码,我会收到类似的错误,但它将引用正确的实例。

我根据这个答案将驱动程序更新为路径,并且没有查找失败,因此如果您安装了 odbcsql18 驱动程序,则类似下面的内容可能可以作为替代。

"DRIVER=/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.3.so.1.1;"
Run Code Online (Sandbox Code Playgroud)

我已经使用以下命令在容器上安装了这些较新的驱动程序

curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list
apt-get update && ACCEPT_EULA=Y apt install unixodbc jq msodbcsql18 mssql-tools18 unixodbc-dev -y
Run Code Online (Sandbox Code Playgroud)