Python3.x: pyodbc+FreeTDS+UinxODBC连接sybase数据库(Linux系统)
一、安装UinxODBC以及依赖包
yum -y install gcc gcc-c++ unixodbc unixODBC-devel python-devel
下载地址:ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.0.tar.gz
下载安装包unixODBC-2.3.0.tar.gz放到/usr/local下。
unixODBC版本目前有两套,soname为libodbc.so.1与soname为libodbc.so.2
对于使用libodbc.so.1的驱动下载unixODBC-2.3.0.tar.gz,作者自己发现最高版本的libodbc.so.1库;
对于使用libodbc.so.2的驱动下载最新的unixODBC即可。
二、安装 FreeTDS
这个软件能够用Linux和Unix连接MS SQLServer和Sybase数据库。
版本:0.64下载地址:http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
tar xf freetds-stable.tgz cd freetds-0.91/ ./configure --prefix=/usr/local/freetds --with-unixodbc=/usr/ --with-tdsver=5.0
# ./configure --prefix=/usr/local/freetds0.91 --enable-msdblib --with-tdsver=8.0 make make install
三、配置FreeTDS并用tsql测试连接
vi /usr/local/freetds/etc/freetds.conf #添加如下内容: [Sybase] host = IP 地址 port = 端口号 tds version = 5.0 client charset = UTF-8 #具体的IP和端口号替换成个人所需即可 #测试连接: /usr/local/freetds/bin/tsql -S Sybase -U 用户名 -P 密码 #如果出现如下内容,或者类似内容,表示连接成功,此时可以执行一些SQL语句试试 locale is "en_US.utf8" locale charset is "UTF-8" using default charset "UTF-8" 1> select getdate() 2> go getdate() Nov 29 2018 02:05:20:050PM (1 row affected) 1>
四、配置UinxODBC以及测试isql
#创建驱动的模板文件1.txt 内容如下: [TDS] Description = Sybase Setup = /usr/lib/libtdsS.so Driver64 = /usr/local/freetds/lib/libtdsodbc.so Driver = /usr/local/freetds/lib/libtdsodbc.so setup64 = /usr/lib64/libtdsS.so FileUsage = 1 UsageCount = 2 #然后使用odbcinst安装驱动: odbcinst -i -d -f 1.txt #执行完成之后,可以检查一下/etc/odbcinst.ini,如果可以看到TDS的内容,说明配置没问题 #也可以用odbcinst -q -d 检查驱动 #创建数据源的模板文件,内容如下: [xiaosu] Driver = TDS Descrption = Sybase Server Trace = No Server = IP地址 Database = 数据库 Port = 端口号 #这里的Database,IP地址和端口号替换成自己需要的即可 odbcinst -i -s -f 2.txt #执行完成以后,会在用户的home目录下生成.odbc.ini的文件,vim ~/.odbc.ini检查一下文件内容即可。也可以用odbcinst -q -s检查可用的数据源 #用isql测试连接: isql -v xiaosu 用户名 密码 #如果出现如下内容,说明连接成功了。 +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
五、编译安装pyodbc
unzip pyodbc-3.0.7.zip cd pyodbc-3.0.7 python setup.py install
六、测试pyodbc连接
import pyodbc conn=pyodbc.connect("DSN=xiaosu;UID=uid;pwd=password") cursor=conn.cursor() #输出数据库中所有表名 cursor.execute("select name from sysobjects where type ='U'") for i in cursor: print(i)