pyodbc连接informix

921 阅读2分钟

前言

需要采集informix 数据库中数据,考虑到工作量(只会c/c++),突然想到了万能的python。折腾了一下午,终于采集到了!

翻了很多帖子,找到了informixdb 和 pyodbc两种途径。

环境

centos 6.9
python 2.7.9

informix 信息: 
                database: pb
                host:  192.168.2.21
                port: 7000
                servername: cin_ctx
                user: pb
                password: 123456
                

由于曾经使用过odbc方式连接数据库,感觉很麻烦,就直接先试了informixdb,目前informixdb 只有2.5版本,而且是在pyton2.5 环境下的, 在windowns下几经周折,一直安装编译失败,linux 下也失败了。 最后决定使用pyodbc, pyodbc 目前版本已经不支持python 2.6,在编译的过程中也会出现问题,如果系统中python版本是2.6或者2.6一下,望升级2.7 或者更高,具体升级方法网上有很多种

依赖环境

  • python 2.7
  • unixODBC
  • informix CSDK(The Informix ODBC Driver is included as part of the IBM Informix CSDK package)

由于在IBM官网下载linux版的CSDK 安装,在运行* #installclientsdk * 时找不到JRE 库,最终选择了直接编译安装informix server。

安装

安装informix server(主要需要里面的odbc 驱动以及 esqsl)

创建informix用户

# useradd -d /opt/informix -m informix -s /bin/bash

解压informix server安装包

# tar -xvf Informix_Ultimate_11.70.FC4_LIN_X86_64.tar -C /opt/informix

切换到informix 用户

# su - informix

配置informix 用户下环境变量

INFORMIXDIR=/opt/informix/install
LD_LIBRARY_PATH=$INFORMIXDIR/lib:$INFORMIXDIR/lib/esql:$INFORMIXDIR/lib/cli:$LD_LIBRARY_PATH
export INFORMIXDIR INFORMIXSERVER ONCONFIG DBDATE LD_LIBRARY_PATH
PATH=$PATH:$INFORMIXDIR/bin
export PATH
export  INFORMIXSQLHOSTS=$INFORMIXDIR/etc/sqlhosts

创建install 目录, 并开始安装

$touch install
$ ./ids_install

安装unixODBC

# yum install unixODBC-devel

也可以选择下载安装包安装

配置环境变量

$export ODBCINI=/etc/odbc.ini

编辑odbc 配置文件

  • odbcinst.ini [INFORMIX] Description = ODBC for INFORMIX Driver = INFORMIXDIR/lib/cli/iclit09b.soSetup=INFORMIXDIR/lib/cli/iclit09b.so Setup = INFORMIXDIR/lib/cli/iclit09b.so FileUsage = 1

  • odbc.ini [informix] Driver = INFORMIX Description = ODBC for INFORMIX SERVERNAME=cin_ctx Database=pb LogonID=pb pwd=123456

配置sqlhosts 文件

  • sqlhosts cin_ctx onsoctcp 192.168.2.21 7000

catalog测试

$ cd $INFORMIXDIR/demo/cli
$ make catalog
$ ./catlog informix

当执行一切ok的话,说明配置正常,可以撸python代码了

安装pyodbc

pip install pyodbc

连接 informix demo

#!/bin/env python
import pyodbc

if __name__ == '__main__':
    with pyodbc.connect('DSN=informix') as conn:
        with conn.cursor() as  cursor:
            cursor.execute('select hostname,overtime from sip_st')
            rows = cursor.fetchall()
            for row in rows:
                print row[0], row[1]

DSN 为 配置在 odbc.ini 中的 节点名字 (PS: 为了这么不到10行的代码,铺垫了辣么多~~~ 心累!!!没有java 的jdbc方便)

参照

IBM 官网介绍 informix ODBC使用和配www.ibm.com/developerwo…

pyodbc wiki github.com/mkleehammer…

pyodbc geting started github.com/mkleehammer…

pyodbc will not compile on Centos 6.6 github.com/mkleehammer… (需要升级python 到2.7)

python 2.6升级2.7,仅供参考,不要照搬,小心砸到自己 blog.csdn.net/jcjc918/art…