> 文章列表 > Linux 下用 Python 连接 MSSql Server 2008

Linux 下用 Python 连接 MSSql Server 2008

Linux 下用 Python 连接 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 驱动管理器,官网:http://unixodbc.org。先确保你已经装上了它。如果你在 ubuntu/debian 下,直接执行:
sudo apt-get install unixODBC unixODBC-bin

就可以把 unixODBC 装上了,附带装上了图形化的 ODBC 管理器 ODBCConfig,它的样子大概是这样的:

Linux 下用 Python 连接 MSSql Server 2008

如果你确定会在命令行下工作,就不安装 unicODBC-bin 也可以。而且后文的相关操作也是通过命令行来完成的,不会使用 ODBCConfig,提到这个只为方便 GUI 爱好者。

安装Freetds

Freetds 是应用最为广泛的 Linux 下的 ODBC 驱动,官网:http://www.freetds.org/。因为我们用的版本是 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]

139 host = 192.168.18.4

140 port = 1433

141 tds 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

无疑,这一步是最容易的了。先到这里(http://code.google.com/p/pyodbc/downloads/list)下载 pyodbc 源码包,然后解压到相应的目录,再执行:
sudo python setup.py build
sudo python setup.py install
即可。

最后仍然是测试,可以参考http://code.google.com/p/pyodbc/wiki/Examples的代码。

参考资料

CentOs下php连mssql并配置unixODBC

http://rickyfang.blog.51cto.com/1213/125837

PyODBC, UnixODBC, FreeTDS – config

http://203.208.39.99/search?q=cache:a5KR0lOOYaYJ:kipb7.wordpress.com/2008/06/12/pyodbc-unixodbc-freetds-config/+pyodbc+inurl:kipb7&hl=zh-CN&ct=clnk&cd=1&gl=cn&client=firefox-a&st_usg=ALhdy293zSnO8RbxkRswuT73jHl3mg25_Q

unixODBC 教?W

http://ycfunet.blogspot.com/2008/04/unixodbc.html

“有”情社区

python-cn

http://groups.google.com/group/python-cn