Linux下python链接sqlserver

    最近须要获取一批mssql服务器上的相关数据进行分析,因为须要天天定时获取mssql的数据,并进行报警,并且平时都是在linux下工做,这可犯愁了,google发现一个相似MySQLdb的python模块叫pymssql,是用来专门连接mssql的,因而赶忙下载下来试用一番,发现一直连接失败,必定是我打开的方式不对... python


因而我换了一个方案:ODBC+FreeTDS+pyodbc linux

试验环境:ubuntu12.04  sql

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 ubuntu

    在前三步把相关的数据包安装完毕后,就得配置数据源了,主要是配置三个文件:/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 设置客户端的字符集
fetch

   更详细的配置参考man freetds.conf,配置完成后就须要测试了,使用tsql命令,tsql是用来测试FreeTDS链接和请求的 google

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。

相关文章
相关标签/搜索