ubuntu下ODBC访问mssql和sybase(perl&python)

本文详细介绍了如何安装并配置freetds、unixodbc、DBD-ODBC,实现Perl与Python访问SQL Server数据库的过程。包括安装步骤、配置文件修改、测试实例及针对不同数据库如Sybase的特殊配置。

一、安装freetds

参考http://my.oschina.net/u/2245781/blog/626203

二、安装unixodbc

sudo  apt-get install unixodbc unixodbc-bin unixodbc-dev

三、获取DBD-ODBC

wget  http://www.cpan.org/authors/id/M/MJ/MJEVANS/DBD-ODBC-1.52.tar.gz

四、安装

tar xzvf DBD-ODBC-1.52.tar.gz 

 cd DBD-ODBC-1.52/

 perl Makefile.PL -o /usr

make&sudo make install

五、配置(freetds已配置好

/etc/odbcinst.ini加上

# setup from FreeTDS package
[FREETDS]
Description     = ODBC of FreeTDS for MS SQL 2000
Driver          = /opt/local/freetds/lib/libtdsodbc.so
Setup          	= /opt/local/freetds/lib/libtdsodbc.so
Trace 		=	Yes
TraceFile	=/opt/local/freetds/odbcinst.log
UsageCount	= 1

/etc/odbc.ini加上

[mysql]
Driver		= /opt/local/mysql-connector/lib/libmyodbc3_r.so
SETUP		= /opt/local/mysql-connector/lib/libmyodbc3_r.so 
UsageCount	= 1

六、测试

perl的dbi数据访问odbc读取sqlserver数据被截断的问题(http://www.lai18.com/content/683266.html),需在perl代码加上

$dbh->{LongTruncOk}=1; 

$dbh->{LongReadLen} = 1048576*1024;

#!/usr/bin/perl
 
use DBI;

 
$dbname="mymotif";
$user="mymotif";
$passwd="wxwpxh";
 

#mssql 字串对应于 /etc/odbc.ini 里面的 [mssql] 
$dsn = "DBI:ODBC:mssql";
  
 
$dbh = DBI->connect($dsn,$user,$passwd) or die "can't connect to database : $DBI::errstr";
$dbh->{LongTruncOk}=1; 
$dbh->{LongReadLen} = 1048576*1024;

$sth=$dbh->prepare("select * from STUDENT");
$sth->execute;
while (@recs=$sth->fetchrow_array) {
print $recs[0].":".$recs[1].":".$recs[2]."\n";
}
$dbh->disconnect;

七、sybase

odbc配置:/etc/odbcinst.ini不变

/etc/odbc.ini加上

[sybase]
Description	= Sybase SQL Server
Driver		= FREETDS
Servername	= egServer50
Database	= testdb

如果环境变量TDSVER的值不是5.0,则需要在perl代码中设置如下:

#!/usr/bin/perl

use DBI;
use DBD::ODBC; 


$user="mymotif";
$passwd="wxwpxh";
$ENV{TDSVER} = "5.0";

#sybase 字串对应于 /etc/odbc.ini 里面的 [DSN] 
$dsn = "DBI:ODBC:sybase";
 

$dbh = DBI->connect($dsn,$user,$passwd) or die "can't connect to database : $DBI::errstr";

$sth=$dbh->prepare("select * from STUDENT");
$sth->execute;

$sth->{'LongTruncOk'} = 1;
while (@recs=$sth->fetchrow_array) {
	print $recs[0].":".$recs[1].":".$recs[2]."\n";
}
$dbh->disconnect;

而在python代码中设置如下

#coding=utf-8
import pyodbc
import os
os.environ["TDSVER"]="5.0"

conn =  pyodbc.connect("DSN=sybase;UID=mymotif;PWD=wxwpxh")
cur = conn.cursor() 			
cur.execute("select * from STUDENT")
info = cur.fetchall() 
print len(info)   	#获得表中有多少条数据
for ii in info:
    print ii[0]+' '+ii[1]+' '+ii[2]+' '+ii[3].strftime('%Y-%m-%d')+' '+ii[4]	
cur.close()
conn.commit()
conn.close()


转载于:https://my.oschina.net/u/2245781/blog/626253

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值