Arce 发表于 2021-7-1 10:01:22

linux + pyodbc + freetds + unixodbc 连接sybase

  操作系统是 RHEL6.2

[*]  安装unixodbc以及依赖包
  yum -y install gcc gcc-c++ unixodbc unixODBC-develpython-devel
[*]  安装 freetds
  tar xf freetds-stable.tgz
  cd freetds-0.91/
  ./configure --prefix=/usr/local/freetds --with-unixodbc=/usr/ --with-tdsver=5.0
  make
  make install
[*]  配置freetds并用tsql测试连接
  vim /usr/local/freetds/etc/freetds.conf
  添加如下内容:
  
  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>
[*]  配置unixodbc以及测试isql
  创建驱动的模板文件1.txt 内容如下:
  
  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 检查驱动
  创建数据源的模板文件,内容如下:
  
  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                       |
  | quit                                  |
  |                                       |
  +---------------------------------------+
  SQL>
[*]  编译安装pyodbc
  unzip pyodbc-3.0.7.zip
  cd pyodbc-3.0.7
  python setup.py install

[*]  测试pyodbc连接
  新建一个xiaosu.py内容如下:
[*]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  python xiaosu.py 如果能把数据库中的表全部打印出来,说明成功了

  
页: [1]
查看完整版本: linux + pyodbc + freetds + unixodbc 连接sybase