pyodbc 连接informix

原创
2017/06/28 11:51
阅读数 2.6K

前言

需要采集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 或者更高,具体升级方法网上有很多种

#开始安装(pyodbc)

依赖环境

  • 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.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使用和配https://www.ibm.com/developerworks/data/library/techarticle/dm-1108odbcdrivermanager/

pyodbc wiki https://github.com/mkleehammer/pyodbc/wiki

pyodbc geting started https://github.com/mkleehammer/pyodbc/wiki/Getting-started

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

python 2.6升级2.7,仅供参考,不要照搬,小心砸到自己 http://blog.csdn.net/jcjc918/article/details/11022345

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部