使用 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