最近須要獲取一批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-dev2 安裝pyodbc
apt-get install python-pyodbc3 安裝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。