CentOS6使用unixODBC+FreeTDS+pyodbc连接Sql Server2008

这个问题看似简单,网上找了N多资料,都是不行的。

今晚终于解决,途径如下:

----特别说明一下,我这边手头上只有一台32位的系统,没有64位的,如果各位版本不一样,下载软件的时候相应要变更一下版本(尤其163源)

 

0. 系统环境:

CentOS6.5 32bit(Linux version 2.6.32-71.el6.i686)

Python2.6.6  --升级到--> python2.7.11  (两个版本共存,因为yum依赖2.6.6版本,扯淡地与2.7不兼容)

unixODBC-2.2.14-14.el6.i686

freetds-0.91

pyodbc-3.0.10

 

1. 安装unixODBC

yum install unixODBC

# 一般情况下是能安装的,如果没有网络,或者不能直接通过yum下载安装,那么就上163的开源镜像站下载rpm包后安装:

# http://mirrors.163.com/centos/6.7/os/i386/Packages/unixODBC-2.2.14-14.el6.i686.rpm 

# http://mirrors.163.com/centos/6.7/os/i386/Packages/unixODBC-devel-2.2.14-14.el6.i686.rpm

# http://mirrors.163.com/centos/6.7/os/i386/Packages/unixODBC-kde-2.2.14-14.el6.i686.rpm

# 参考如下命令:

# rpm -ivh unixODBC-2.2.14-14.el6.i686.rpm

 

2. 安装freetds

# 这里首先遇到一个坑,网上一直流转一篇转载无数遍的文章,说安装是用yum的:yum install freetds

# 但这是第三方工具包啊,怎么可能直接yum得到呢?除非你加了第三方的源,但是正常人都不会这么扯淡地。

# 扯远了,安装方法如下:

# wget  http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz

# tar zxvf freetds-stable.tgz

# freetds-0.91    #我当前的版本是0.91,后面可能会更新成更高的版本,对应改一下。

# ./configure --prefix=/usr/local/freetds0.91  --enable-msdblib  --with-tdsver=8.0  //目前最高好像只支持到7.1,但可写到8.0,可用 configure--help 查看

# 这两个参数稍微讲解一下,8.0那个版本我就不说了,enable-msdblib是指开启对MSSQL的支持

# make

# make install

# make clean

# make distclean

 

3. 安装pyodbc

# pip install pyodbc

# 正常来讲捏,这样就能装了,但是如果你用的minimal的系统,那么可能需要先安装一下c++编译器:yum install gcc-c++

# 同理,如果没有办法联网,gcc-c++在163源上可以帮助你:http://mirrors.163.com/centos/6.7/os/i386/Packages/gcc-c%2b%2b-4.4.7-16.el6.i686.rpm

# 而pyodbc也可以在官网下载:https://pypi.python.org/pypi/pyodbc/3.0.10(linux 的话,就下载type=source的那个吧)

# 安装方法很简单,先解压,然后 python setup.py install

 

4. 以上确认都安装好了之后就进行配置的步骤了:

 

1) freetds: 这是连接数据库的基础,必须先配置好

# 添加数据库配置

# cp /usr/local/freetds0.91/etc/freetds.conf /usr/local/freetds0.91/etc/freetds.conf.20160102

# cat >> /usr/local/freetds0.91/etc/freetds.conf

[TestDB]
        host = 192.168.1.100
        port = 1433
        tds version = 8.0

^C #就是 ctrl+c ^_^ #你别把这一行也复制进去了啊

# 这里说明一下,网上流传的配置是有4项的,除了host、post、tds version外,还有一个 client charset = UTF-8

# 这里可是真要留意一下,不能随便配置最后这个参数,传说必须要比服务端的配置高等级才行,反正我只要是配置上了,就无法连接了,所以我没有配这个参数。

# 配置好之后可以用freetds自带的工具测试一下:

# /usr/local/freetds0.91/bin/tsql -S TestDB -U DBUserName -P DBPassword

# 如果显示如下,则表示ok;不行,则请回到上面配置的步骤:

locale is "zh_CN.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1> select getdate()
2> go

1月  2 2016 11:44:49:497(1 row affected)
1>

# 1> 2> 后面的内容是我输入的喔,当然你也可以select * from DBName.dbo.TableName查询,记得加上go

 

2) 配置ODBC:这是pyodbc连接的关键。

#先找一下你系统里面这两个文件放哪里:libtdsodbc.so、libtdsS.so:

# find /usr -name "*\.so" |egrep "libtdsodbc|libtdsS"

/usr/lib/libtdsS.so
/usr/local/freetds0.91/lib/libtdsodbc.so

# 配置

# cp /etc/odbcinst.ini /etc/odbcinst.ini.20160102

# cat >> /etc/odbcinst.ini

[SQL Server]
Description = FreeTDS ODBC driver for MSSQL
Driver = /usr/local/freetds0.91/lib/libtdsodbc.so
Setup = /usr/lib/libtdsS.so
FileUsage = 1

^C    #你别把这一行也复制进去了啊

# 检查一下,默认情况下,应该是有三行,最后那行就是刚刚添加的驱动名称了

# odbcinst -d -q
[PostgreSQL]
[MySQL]
[SQL Server]

# 配置DSN(此步骤非必要,如果要使用isql,就需要配置,否则,如果只使用pyodbc,可以不配置)

# 配置方式有两种:

# 1. 全局DSN:

# cat >> /etc/odbc.ini

# 2. 用户级DSN:

# cat >> ~/.odbc.ini

# 内容都是:

[TESTDSN]
Driver          = SQL Server
Server          = 192.168.1.100
User            = DBUserName
TDS_Version     = 8.0
Port            = 1433

# 可能会冲突,建议还是配置用户级就好了。

# 检查DSN:odbcinst -q -s

# 测试DSN:isql TESTDSN DBUserName DBPassword

 

3) 测试pyodbc:

>>> import pyodbc
>>> DBCONNECTSTR = 'DRIVER={SQL Server};SERVER=192.168.1.100;port=1433;DATABASE=DBNAME;UID=DBUSER;PWD=DBPASS;TDS_Version=8.0;'
>>> conn=pyodbc.connect(DBCONNECTSTR)
>>> conn.execute('select getdate()').fetchall()
>>> conn.close()

>>> [(datetime.datetime(2016, 1, 3, 0, 18, 48, 207000), )]

# 这里特别备注一下,留意第二行的红色字眼,这里坑了我无数遍,我简直连问候父母的心都有了。

# 几乎所有资料都没有这个配置,但是缺了这个配置,就会报错:(感谢参考资料2的作者)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pyodbc.Error: ('08001', '[08001] [unixODBC][FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)')

# 这个鸟问题,可是搞了我几个晚上。

 

 

 

 

 

----------------------------------

参考文献:

1. Centos+PHP5.3.6+Freetds0.9.1安装并配制mssql(2008)支持

2. Linux下python连接sqlserver

3. linux + pyodbc + freetds + unixodbc 连接sybase

 

你可能感兴趣的:(sql,centos,server,FreeTDS,pyodbc)