python中用ibm_db连接远程数据库出现SQLSTATE=58004 错误的解决方法。

官方抄了个例子

import ibm_db
ibm_db.connect("DATABASE=name;HOSTNAME=host;PORT=60000;PROTOCOL=TCPIP;UID=username; PWD=password;", "", "")

连接本地数据库没问题,但是连接远程数据库就出现以下错误

Exception: [IBM][CLI Driver] SQL1042C  An unexpected system error occurred.  SQLSTATE=58004  SQLCODE=-1042

百度搜到了 https://www.cnpython.com/qa/524656 这篇文章,试验在url中加上 

AUTHENTICATION=SERVER;

解决了问题。

附上完整代码,亲测有效。

import ibm_db
url = "DATABASE=testdb;HOSTNAME={0};PORT={1};PROTOCOL=TCPIP;UID={2};PWD={3};AUTHENTICATION=SERVER;".format(remoteserver, port,password)
print("------ db2v11: " + url + " ------")
sql = "select * from schema.tablename"
conn = ibm_db.connect(url, "", "")  # 连接数据库
stmt = ibm_db.exec_immediate(conn, sql)  # 执行sql
result = ibm_db.fetch_both(stmt)  # 将sql返回的第一行数据存入result,result是一个二维数组
result_list = []  # 定义列表存放所有结果
while result:
    ###循环获取sql返回的所有数据###
    result_list.append([result[0], result[1]])  # sql返回多少个字段,就按照列表索引进行获取,本例中是假设返回两个字段
    result = ibm_db.fetch_both(stmt)
for result in result_list:
    print(result)
if ibm_db.active(conn):
    ibm_db.close(conn)

 

posted @ 2022-12-23 17:20  panda4671  阅读(1242)  评论(0编辑  收藏  举报