最近需要获取一批mssql服务器上的相关数据进行分析,由于需要每天定时获取mssql的数据,并进行报警,而且平时都是在linux下工作,这可犯愁了,google发现一个类似MySQLdb的python模块叫pymssql,是用来专门链接mssql的,于是赶紧下载下来试用一番,发现一直链接失败,一定是我打开的方式不对...
于是我换了一个方案:ODBC+FreeTDS+pyodbc
试验环境:ubuntu12.04
1 安装ODBC
1
|
apt
-
get install unixodbc unixodbc
-
bin
unixodbc
-
dev
|
1
|
apt
-
get install python
-
pyodbc
|
1
|
apt
-
get install freetds
-
bin
freetds
-
common freetds
-
dev tdsodbc
|
tdsodbc为FreeTDS的关键包,含有MSSQL的驱动程序文件libtdsodbc.so,而unixodbc为Linux上的ODBC框架,含有关键二进制文件:libodbc.so或libodbc.so.1
在前三步把相关的数据包安装完毕后,就得配置数据源了,主要是配置三个文件:/etc/odbc.ini、/etc/odbcinst.ini、/etc/freetds/freetds.conf
4 配置FreeTDS
/etc/freetds/freetds.conf 默认freetds.conf是有内容的,下面我们追加两台mssql配置信息
1
2
3
4
5
6
7
8
9
10
|
[MQ1]
host
=
jydb01.cloud
-
data.guol.com
port
=
1433
tds version
=
8.0
client charset
=
UTF
-
8
[MQ2]
host
=
jydb01.cloud
-
stg.guol.com
port
=
1433
tds version
=
8.0
client charset
=
UTF
-
8
|
[MQ1] 表示客户端链接哪台服务器,名称可以自己定义。The servername is chosen at the client's descretion.
host 数据库服务器的地址
port 数据库监听的端口
tds version 使用哪个版本的TDS协议
client charset 设置客户端的字符集
更详细的配置参考man freetds.conf,配置完成后就需要测试了,使用tsql命令,tsql是用来测试FreeTDS连接和请求的
1
|
tsql
-
S MQ1
-
U dbcheck
-
p
1433
-
P password
|

看到上面就表示成功啦
5 配置ODBC
5.1 先配置/etc/odbcinst.ini文件,默认该文件是空的
1
2
3
4
5
6
|
[FreeTDS]
Description
=
FreeTDS
Driver
=
/
usr
/
lib
/
x86_64
-
linux
-
gnu
/
odbc
/
libtdsodbc.so
Setup
=
/
usr
/
lib
/
x86_64
-
linux
-
gnu
/
odbc
/
libtdsS.so
FileUsage
=
1
client charset
=
utf
-
8
|
[FreeTDS] 定义的驱动名称
Description 描述信息
Driver 库libtdsodbc.so的路径
Setup
5.2 接着配置/etc/odbc.ini文件,该文件默认是空的
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[MQ1]
Driver
=
FreeTDS
Server
=
jydb01.cloud
-
data.guol.com
User
=
dbcheck
TDS_Version
=
8.0
Port
=
1433
[MQ2]
Driver
=
FreeTDS
Server
=
jydb01.cloud
-
stg.guol.com
User
=
dbcheck
TDS_Version
=
8.0
Port
=
1433
|
配置参数解释:
[MQ1] DSN的名称,不要和FreeTDS中的混淆,两者不必一样的
Driver 使用哪个ODBC驱动
Server 远程服务器地址
User 数据库用户
TDS_Version 使用的TDS协议版本
Port 数据库服务器端口
5.3 测试看目前服务器有哪些ODBC驱动:
1
|
odbcinst
-
q
-
d
|

看到以上内容就说明我明我们配置的FreeTDS成功了
5.4 现在测试是否可以在linux下链接到mssql服务器上:
1
|
isql MQ1 dbcheck passwd
|

成功了...
6 使用pyodbc链接mssql
1
2
3
4
5
6
7
8
9
|
import
pyodbc
import
sys
try
:
conn
=
pyodbc.connect(
'DRIVER={FreeTDS};SERVER=10.22.102.11;port=1433;DATABASE=barra;UID=dbcheck;PWD=passwd;TDS_Version=8.0;'
)
print
'connect ok......'
except
Exception,e:
print
e
sys.exit()
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import
pymssql
import
sys
try
:
con_mssql
=
pymssql.connect(host
=
'jydb01.cloud-data.guol.com'
,user
=
'dbcheck'
,password
=
'passwd'
,charset
=
"utf8"
)
print
'connect ok...'
except
Exception,e:
print
e
sys.exit()
cursor
=
con_mssql.cursor()
sql
=
"select count(*) from JYDB.dbo.QT where TradingDay='2013-10-17'"
cursor.execute(sql)
data
=
cursor.fetchall()
print
data
|
至此,终于可以在linux下用python连接mssql。
文章转自:http://my.oschina.net/guol/blog/182295