Linux下python3 使用pyodbc连接SQL SERVER数据库设置方法

转载请提供原文出处。谢谢!

最近写个小程序需要用到python连接SQL SERVER 数据库。python连接MSSQL数据库考虑过用pymssql这个包。这个包使用起来相对方便,但是对字符集的支持不是特别好。如果遇到生僻字的话,无法解析并不能返回结果。可能是受制于freetds。因为这个包也是在freetds上写的。总而言之。总而言之决定放弃pymssql,改用pyodbc去连接sqlserver

最开始接触pyodbc以为同样的代码不能跨平台使用,需要改连接串和IP地址。但是后来才知道。其实是可以把windows的代码拿过来什么都不需要该直接在linux上运行的。其实这应该得益于微软官方的驱动。微软的数据库已经可以在linux上运行了。自然而然也就会完善对应的驱动。这样就不再受freetds存在的bug困扰了

废话不说了。开始进入正题。windows下我们直接

pip install pyodbc

就行了。下面主要说下linux下怎么安装。以Ubuntu 16.04 为参考进行说明。

Ubuntu 16.04 安装pyodbc之前我们要先装好微软官方提供的odbc驱动。官方教程地址为

https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-2017

这里面有多个linux发行版本多个驱动版本的安装说明。还是以Ubuntu16.04来说。请注意

下面的是以

Microsoft ODBC Driver 13.1 for SQL Server

这个驱动名称进行说明的。这非常重要。

1切换到su.避免权限不足

sudo su 

2添加官方的驱动源地址

curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

3升级源并安装odbc驱动

sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install msodbcsql

4安装mssql-tool

sudo ACCEPT_EULA=Y apt-get install mssql-tools

5.将mssql-tool保存到系统变量并使之生效

echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

以上已经安装完成微软官方提供的ODBC驱动。接下来要正式安装pyodbc了。官方教程地址为

https://github.com/mkleehammer/pyodbc/wiki

这里有安装,配置,使用等详细的说明

安装pyodbc和依赖。

sudo apt install python3-pip
sudo apt install unixodbc-dev
sudo pip3 install pyodbc

然后就可以使用了在linux上也可以直接连接sqlserver数据库了

该教程与官方教程不太一致。官方教程里有需要将DSN配置到系统里。也就是多了一个odbc.ini文件的配置。如果使用DSN连接方式的话。那么如果连接目标发生改变需要修改或增加DSN的配置,将新的IP地址,连接名。添加进去。这种方式比较适合正式生成环境。

现在网上好多关于pyodbc的连接串的说明。但是看起来很乱。连接串不对。也是导致不能跨平台的原因

先看官方提供的连接串

DRIVER={ODBC Driver 11 for SQL Server};SERVER=test;DATABASE=test;UID=user;PWD=password

也就是说如果要获取个connect需要这样写

conn = pyodbc.connect(
    r'DRIVER={ODBC Driver 11 for SQL Server};'
    r'SERVER=test;'
    r'DATABASE=test;'
    r'UID=user;'
    r'PWD=password'
    )


说一下

DRIVER={ODBC Driver 11 for SQL Server}

DRIVER 代表直接用driver驱动去连接,而不是用DSN的方式。这两个连接方式有所不同,这里不具体说明。这个DRIVER很多教程都是写成{SQL Server}。 说明下,如果写成这个在linux下是不能连接的。即使你装了官方ODBC驱动。也就是只能在windows下运行。linux下这个driver应该写上安装的驱动的对应名称!需要特别注意这点。说明如下

 

  • {SQL Server} - released with SQL Server 2000
  • {SQL Native Client} - released with SQL Server 2005 (also known as version 9.0)
  • {SQL Server Native Client 10.0} - released with SQL Server 2008
  • {SQL Server Native Client 11.0} - released with SQL Server 2012
  • {ODBC Driver 11 for SQL Server} - supports SQL Server 2005 through 2014
  • {ODBC Driver 13 for SQL Server} - supports SQL Server 2005 through 2016
  • {ODBC Driver 13.1 for SQL Server} - supports SQL Server 2008 through 2016
  • {ODBC Driver 17 for SQL Server} - supports SQL Server 2008 through 2017

微软的linux下ODBC驱动应该是在2014年才提供的(只是猜测)。所以我们要把连接串改为我们安装的对应的驱动版本。也就是上面用红色标记出来的版本。ODBC Driver 13.1 for SQL Server

所以最终的连接串应该为

conn = pyodbc.connect(
    r'DRIVER={ODBC Driver 13.1 for SQL Server};'
    r'SERVER=test;'
    r'DATABASE=test;'
    r'UID=user;'
    r'PWD=password'
    )

总之这个

ODBC Driver 13.1 for SQL Server

应该是所装驱动的版本。windows下无需考虑这个问题。怎么写都无所谓,否则会报错

Error: (‘01000’, “[01000] [unixODBC][Driver Manager]Can’t open lib ‘SQL Server’ : file not found (0) (SQLDriverConnect)”)

另外需要说明下。连接串里没有端口号。端口需要与ip写在一起,并用逗号分隔!

pymssql是冒号。注意它俩之间的不同。

以上为所用的配置说明。欢迎大家留言交换经验

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值