为什么80%的码农都做不了架构师?>>>
最近需要获取一批mssql服务器上的相关数据进行分析,由于需要每天定时获取mssql的数据,并进行报警,而且平时都是在linux下工作,这可犯愁了,google发现一个类似MySQLdb的python模块叫pymssql,是用来专门链接mssql的,于是赶紧下载下来试用一番,发现一直链接失败,一定是我打开的方式不对...
于是我换了一个方案:ODBC+FreeTDS+pyodbc
试验环境:ubuntu12.04
1 安装ODBC
apt-get install unixodbc unixodbc-bin unixodbc-dev
2 安装pyodbc
apt-get install python-pyodbc
3 安装FreeTDS
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配置信息
[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连接和请求的
tsql -S MQ1 -U dbcheck -p 1433 -P password
看到上面就表示成功啦
5 配置ODBC
5.1 先配置/etc/odbcinst.ini文件,默认该文件是空的
[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文件,该文件默认是空的
[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驱动:
odbcinst -q -d
看到以上内容就说明我明我们配置的FreeTDS成功了
5.4 现在测试是否可以在linux下链接到mssql服务器上:
isql MQ1 dbcheck passwd
成功了...
6 使用pyodbc链接mssql
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()
7 以正确的方式打开
pymssql
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。