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

Mon*_*oya 15 linux sql-server azure python-3.x azure-sql-database

我正在尝试连接到Microsoft Azure SQL Server数据库.

这是我试图连接的方式:

 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"))
Run Code Online (Sandbox Code Playgroud)

我在排除这一行时遇到错误.错误:

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

想不通为什么会这样,有什么想法吗?

mee*_*dev 21

我还建议您安装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
Run Code Online (Sandbox Code Playgroud)

完成后,使用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()
Run Code Online (Sandbox Code Playgroud)

让我知道这是怎么回事.

干杯,
见面

  • 那个 sh 脚本坏了! (5认同)
  • 请注意,Microsoft的installodbc.sh会从源代码安装unixodbc.这可能不是您想要的,因为unixodbc 2.3.1可从Ubuntu存储库获得,至少从Xenial开始.这里给出了为许多操作系统安装ODBC驱动程序的过程:https://msdn.microsoft.com/en-us/library/hh568454(v = sql.110).aspx (4认同)

Jas*_*son 12

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

  • 你救了我的命 (5认同)
  • 只需使用“{ODBC Driver 17 for SQL Server}”就可以了 (5认同)
  • 在执行此操作之前,我先遵循https://docs.microsoft.com/zh-cn/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view= sql-server-2017安装odbc驱动程序。 (2认同)
  • 我最终到了这里,在我的 SQLAlchemy 连接 URL 中更新了这个值: `engine = create_engine("mssql+pyodbc://" + uname + ":" + pword + "@" + server + "/" + dbname + "?驱动程序=ODBC+Driver+17+for+SQL+Server")`谢谢@ws_ (2认同)

Moh*_*med 11

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

这个 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
Run Code Online (Sandbox Code Playgroud)

然后改变,

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

DRIVER={ODBC Driver 17 for SQL Server}
Run Code Online (Sandbox Code Playgroud)