Linux下用Python连接MSSql Server 2008
Keywords:Linux、python、pyodbc、freetds、unixODBC、tsql、isql、mssql、mssql server、mssql server 2008
缘起
因为客户要求在应用上部署mssql server 2008,而我们习惯了开发Linux下的服务器程序,所以就有了在linux下用python连接mssql server 2008的需求。这个需求非常折腾人,我们花了许多时间在上面,仍然没有搞定。后来是请了python-cn列表的vcc出手,通过ssh直接上机操作才搞定的;相信以后搞不定的人还会不少,所以就把其中的经验写出来,方便后来者,也方便自己日后发布应用程序时能够有一个指导性的文档。
写作本文时我们用的实验机器安装的是ubuntu 8.04,使用其它linux发行版的朋友请相应地更改shell命令。
安装unixODBC
unixODBC是linux下的ODBC驱动管理器,官网:。先确保你已经装上了它。如果你在ubuntu/debian下,直接执行:sudo apt-get install unixODBC unixODBC-bin
就可以把unixODBC装上了,附带装上了图形化的ODBC管理器ODBCConfig,它的样子大概是这样的:
如果你确定会在命令行下工作,就不安装unicODBC-bin也可以。而且后文的相关操作也是通过命令行来完成的,不会使用ODBCConfig,提到这个只为方便GUI爱好者。
安装Freetds
Freetds是应用最为广泛的Linux下的ODBC驱动,官网:。因为我们用的版本是0.82版,而ubuntu的更新源里仍然是0.63版本,我这边建议你执行sudo apt-get remove freetds freetds-dev来把以前装的版本删除掉,然后下载0.82或更新的版本。
编译freetds的时候一定要注意configure的参数,我估计当时我编译的时候参数没有设置正确,所以一直没有能够连上mssql server。Vcc分享了他的编译参数,如下:./configure /
--prefix=/etc/freetds /
--with-tdsver=8.0 --enable-msdblib /
--enable-dbmfix /
--with-gnu-ld /
--enable-shared /
--enable-static
执行configure之后再sudo make,sudo make install,耐心等候安装完成就可以了。
安装完成后,该用tsql测试一下,测试的方式是执行:tsql–H mssql-server-ip–U username–P password
出现1>提示符就是成功啦。
配置freetds
Freetds的配置文件位置在/etc/freetds/freetds.conf里,打开后在最后面增加如下一个section:
138 [db4]
139host = 192.168.18.4
140port = 1433
141tds version = 7.0
其中host是mssql server的地址,tds version是指定使用哪个tds版本,据vcc说,用7.0的兼容性比较好,我小试了一下,8.0也是可以的。
完成以后,应该用tsql测试一下,测试的方式是执行:tsql–S db4–U username–P password
看到1>标识符就是成功啦。
配置ODBC驱动
接下来我们要配置一个ODBC驱动,驱动存储在/etc/odbcinst.ini文件中,用vi打开后,写入下面的内容:
1 [SQL Server]
2 Description= MS-SQLServer
3 Driver= /usr/local/freetds/lib/libtdsodbc.so
4 Driver64= /usr/local/freetds/lib/libtdsodbc.so
5 Setup= /usr/lib/odbc/libtdsS.so
6 Setup64= /usr/lib/odbc/libtdsS.so
7 UsageCount= 1
8 CPTimeout=
9 CPReuse=
10 FileUsage= 1
这样我们就配置好一个名为SQL Server的驱动了。如果你的odbcinst.ini之前是空的,可能还需要这样一个section:
12 [ODBC]
13 Trace= Yes
14 TraceFile= /tmp/sql.log
15 ForceTrace= No
16 Pooling= Yes
其中Trace是指定要不要写log,写log会降低程序性能,发布版记得把Trace的值改为No。
配置ODBC数据源
现在该到配置数据源的时候了,ODBC数据源存放在/etc/odbc.ini文件中,我们用vi打开,然后加入如下内容:
8 [mssql2k8]
9 Description= link to 18.4
10 Driver= SQL Server
12 Servername = db4
14 Database= tempdb
可以看到这个名为mssql2k8的数据中,使用了前面在odbcinst.ini中定义的驱动“SQL Server”,在freetds.conf中定义的db4数据库服务器,前面的工作必不可少哇。
配置完成后可以使用isql测试一下,测试方式是执行:isql mssql2k8 username password
在isql中你可以执行相应的sql语句,比如select * from table,看看是不是真的已经能够从mssql server 2008中取得数据了。
安装pyodbc
无疑,这一步是最容易的了。先到这里()下载pyodbc源码包,然后解压到相应的目录,再执行:sudo python setup.py build
sudo python setup.py install即可。
参考资料
CentOs下php连mssql并配置unixODBC
PyODBC, UnixODBC, FreeTDS–config
unixODBC教學
“有”情社区
python-cn