我正试图通过python3远程连接到AS400中的db2数据库。我无法接通错误信息。我在windows操作系统的spyder IDE中运行。
import ibm_db
conn=ibm_db.connect(f"DATABASE=xxxx;HOSTNAME=xxxx;PORT=21;PROTOCOL=TCPIP;UID=xxxxx;PWD=xxxxx;",'','')
connState = ibm_db.active(conn)
print(connState)
错误消息
SQLCODE=-30081][CLI驱动程序]SQL30081N检测到通信错误。正在使用的通信协议:";TCP/IP";。正在使用的通信API:;插座";。检测到错误的位置:";10.248.11.78";。检测错误的通信功能:;连接";。协议特定错误代码:";10061">">";。SQLSTATE=08001
我确实参考了该文档https://www.ibm.com/support/pages/sql30081n-tcpip-communication-errors但无法取得进展。我是这种关系的新手,非常感谢您的帮助。
编辑
如评论中所建议。我使用pyodbc
成功地连接到db2数据库,现在我正在尝试调用一个存储过程。我的存储过程有3个必需的输入(均为数字(和2个输出(均为字母数字(参数
import pyodbc
conn = pyodbc.connect('Driver={iSeries Access ODBC Driver}; '
'SYSTEM = xx.xxx.xx.xx;'
'Hostname=xxx; '
'Port=21; '
'Protocol=TCPIP; '
'Database=MYLIB; '
'UID=xxxxx; '
'PWD = xxxx;'
,autocommit=True)
cur = conn.cursor()
params = ("072220","0306529","10000")
cur.execute("{CALL MYLIB.MY_SP (@param1name=?, @param2name=?, @param3name=?)}",params)
错误消息
('HY000','[HY000][IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0440-在MYLIB中找不到具有指定参数的例程MY_SP。(-440((SQLPrepare('(
这是否意味着我没有正确传递参数?
我认为问题出在我定义参数的方式上。我需要";0";输出参数
import pyodbc
conn = pyodbc.connect('Driver={iSeries Access ODBC Driver}; '
'SYSTEM = xx.xxx.xx.xx;'
'Hostname=xxx; '
'Port=21; '
'Protocol=TCPIP; '
'Database=MYLIB; '
'UID=xxxxx; '
'PWD = xxxx;'
,autocommit=True)
cur = conn.cursor()
params = ("072220","0306529","10000",0,0)
cur.execute("{CALL MYLIB.MY_SP (?,?,?,?,?)}",params)