前言
需要采集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.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…