使用 python 的 ibm_db 连接到 informix

Posted

技术标签:

【中文标题】使用 python 的 ibm_db 连接到 informix【英文标题】:Connect to informix with python's ibm_db 【发布时间】:2013-10-18 23:29:46 【问题描述】:

我对 python 很陌生。我正在尝试使用 python 和 ibm_db.connect() 连接到 informix 服务器。但是我似乎无法成功,并且错误消息也无济于事。

使用 java 和 jdbc 我可以通过以下连接 url 成功连接:

jdbc:informix-sqli://10.20.30.40:1234/mydb:INFORMIXSERVER=foo_bar;USER=user;PASSWORD=pass;

我使用 ibm_db 的尝试是:

ibm_db.connect('HOSTNAME=10.20.30.40;PORT=1234;DATABASE=mydb;PROTOCOL=ONSOCTCP;UID=user;PASSWORD=pass;', '', '')

但它给出了错误(异常:[IBM][CLI Driver] SQL0902C 发生系统错误。无法处理后续 SQL 语句。IBM 软件支持原因代码:“”。SQLSTATE=58005)

如果可能的话,我想要一个等效的字符串作为第一个参数输入

ibm_db.connect('', '', '')

这样我就可以连接python了。

【问题讨论】:

【参考方案1】:

请查看https://code.google.com/p/ibm-db/issues/detail?id=116&can=1&q=ONSOCTCP,这可能对您有所帮助。如果您仍然遇到问题,那么您可以将您的查询发布到https://groups.google.com/forum/#!forum/ibm_db 以便快速回复。

【讨论】:

【参考方案2】:

ibm_db 不支持协议 onsoctcp。

请查看https://www.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/com.ibm.admin.doc/ids_admin_0207.htm,这可以帮助您配置对数据库的 DDRA (tcpip) 访问权限。

【讨论】:

【参考方案3】:

我在使用 ibm_db 时遇到了同样的问题,现在我使用 jayDeBeApi 通过 python 连接到 Informix。它需要 java JDBC 驱动程序和应用程序的工作就像一个魅力。

https://pypi.org/project/JayDeBeApi/#:~:text=The%20JayDeBeApi%20module%20allows%20you,of%20the%20Java%20JDBC%20driver.

【讨论】:

【参考方案4】:

您的 JDBC 连接字符串指向 SQLI Informix 侦听器,但“ibm_db”python 模块使用 DRDA(IBM 数据服务器驱动程序)连接到 Informix 引擎。

Informix 允许 SQLI 和 DRDA 客户端(以及 MongoDB 等其他客户端)。 SQLI 是“本机”Informix 协议,支持所有 Informix 服务器功能和数据类型。 DRDA 是其他 IBM 数据库使用的(如 DB2)。它在您可以使用的类型方面确实有一些限制。

您有两个选择: 配置 Informix 服务器以侦听另一个端口中的 DRDA 连接(基本上,使用“drsoctcp”创建 DALIASES),如下所述:

https://www.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/com.ibm.admin.doc/ids_admin_0207.htm

或者让服务器保持原样,并使用不同的 Python 模块,一个使用 SQLI 的模块,例如 'IfxPy'

https://github.com/OpenInformix/IfxPy

【讨论】:

以上是关于使用 python 的 ibm_db 连接到 informix的主要内容,如果未能解决你的问题,请参考以下文章

无法将 zOS DB2 与 python ibm_db 连接

在 Windows 上使用 pyodbc 连接到 Informix

将Python连接到远程DB2服务器

Django、Informix、ibm_db 和 DB2 数据服务器驱动程序

db2 python [处理失败]

离线安装python的ibm_db模块