使用 python 远程连接到 as400
Remote connection to as400 with python
我正在尝试通过 python3 远程连接到 AS400 中的 db2 数据库。我无法理解错误消息。我是 运行 在 spyder IDE 在 windows OS.
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 Driver] SQL30081N A communication error has been detected. Communication protocol being used: "TCP/IP". Communication API being used: "SOCKETS". Location where the error was detected: "10.248.11.78". Communication function detecting the error: "connect". Protocol specific error code(s): "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 - Routine MY_SP in MYLIB not found with specified parameters. (-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)
我正在尝试通过 python3 远程连接到 AS400 中的 db2 数据库。我无法理解错误消息。我是 运行 在 spyder IDE 在 windows OS.
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 Driver] SQL30081N A communication error has been detected. Communication protocol being used: "TCP/IP". Communication API being used: "SOCKETS". Location where the error was detected: "10.248.11.78". Communication function detecting the error: "connect". Protocol specific error code(s): "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 - Routine MY_SP in MYLIB not found with specified parameters. (-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)