一.安装linux下Sqlserver的驱动程序:
我们先来安装SqlServer的驱动程序,再安装ODBC相关的,目的是想尽快可以进行测试,因为在安装完Freetds之后,我们马上就可以在linux下连上SqlServer了。
安装Freetds,不要使用apt-get install 来安装,因为源里的版本不一定是新的,建议版本是0.82版,下载源码手工编译安装,因为有好些参数需要在编译中指定的。
1、使用命令行,切换到解压后freetds的目录下面,执行以下命令
./configure \
--prefix=/etc/freetds \
--with-tdsver=8.0
--enable-msdblib \
--enable-dbmfix \
--with-gnu-ld \
--enable-shared \
--enable-static
2、sudo make
3、sudo make install
好了。如果不出意外,freetds已经安装好了。再安装一个小工具freetds-bin,用来测试一下连接你的数据库:
apt-get freetds-bin
安装完毕后,可以使用tsql命令来进行测试SqlServer数据库连接:
# tsql -H 192.168.0.204 -p 1433 -U sa
Password:
locale is "en_US.UTF-8"
locale charset is "UTF-8"
1>
注:如果出现下列错误
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Error 20017 (severity 9):
Unexpected EOF from the server
OS error 115, "Operation now in progress"
Error 20002 (severity 9):
Adaptive Server connection failed
There was a problem connecting to the server
可能和版本有关系请使用下列方式连接:
# TDSVER=8.0 tsql -H 10.88.51.167 -p 1433 -U sa
二.安装linux下的ODBC驱动管理程序:
现在安装unixODBC,让linux下的应用程序可以通过ODBC来访问数据源。我们需要分别安装unixodbc,unixodbc-dev,unixodbc-bin(可选),tdsodbc
apt-get install unixodbc unixodbc-dev unixodbc-bin tdsodbc
前 面讲过了,ODBC驱动管理器会管理数据库驱动和数据源,那么它是如何管理的呢?答案是配置文件,分别有数据库驱动的配置文件和数据源的配置文件,分别是 odbcinst.ini和odbc.ini,其所在的位置可能会因操作系统和安装方式而异,不过可以使用odbcinst -j命令来查看:
root@ubuntu:/home/jeff# odbcinst -j
unixODBC 2.2.11
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
USER DATA SOURCES..: /root/.odbc.ini
在输出的结果中看到数据库驱动的配置文件是/etc/odbcinst.ini、数据源配置是/etc/odbc.ini和/root/odbc.ini。我们可以打开这两个文件看看,是没有内容D。现在我们要做的就是配置数据驱动以及数据源。
三、修改odbc配置:
vi /etc/odbcinst.ini
添加FreeTDS驱动:
[SQL Server]
Description = FreeTDS ODBC driver for MSSQL
Driver = /usr/lib/libtdsodbc.so
Setup = /usr/lib/libtdsS.so
FileUsage = 1
四、连接数据库:
# -*- coding: utf-8 -*-
import pyodbc db = pyodbc.connect('DRIVER={SQL Server};Server=10.88.51.167,1433;DATABASE=tempdb;UID=sa;PWD=sa_DnMirr12;TDS_Version=8.0')
cursor = db.cursor()
recSet = cursor.execute('select top 10 name from sys.objects').fetchall()
for recOne in recSet:
print(recOne.name)
cursor.close()
db.close()
1.一定要记得加上TDS_Version,否则会找不到数据源,或者修改配置文件中的 TDS 的默认版本号。 2.当导入 pyodbc 报目录权限错误时,导入部分可以修改为
# -*- coding: utf-8 -*-
import os
os.environ['PYTHON_EGG_CACHE'] = '/tmp/'
import pyodbc 3.当连接SQLServer取回汉字乱码时,连接数据库时增加参数 unicode_results=True ,返回值进行 utf-8 解码
db = pyodbc.connect('DRIVER={SQL Server};Server=10.88.51.167,1433;DATABASE=tempdb;UID=sa;PWD=sa_DnMirr12;TDS_Version=8.0',unicode_results=True)
cursor = db.cursor()
recSet = cursor.execute('select top 10 name from sys.objects').fetchall()
for recOne in recSet:
print(str(recOne.name).decode('utf-8', 'ignore'))
cursor.close()
db.close()
参考文档:
http://www.jeffkit.info/2010/01/476/
http://www.cnblogs.com/trams/archive/2011/12/02/2272079.html