看看下面的代码:
date
此代码示例在fetch_assoc()步骤返回以下错误。
import ibm_db
#Authentication Details
f=open(r"C:\Users\XXXXX\My Code\.rc","r")
lines=f.readlines()
us=lines[0].rstrip()
pd=lines[1]
sql_file = "NNM_SQL.sql"
f = open(r"Z:\MSG\BACI-FAKC\Projects\\" + sql_file,"r")
sql = f.read()
conn_str = "DATABASE=DBMIDAS;HOSTNAME=abc.cx.dx.com;PORT=45000;PROTOCOL=TCPIP;UID="+us+";PWD="+pd+";"
conn = ibm_db.connect(conn_str,"","")
#result=ibm_db.exec_immediate(conn,sql)
stmt = ibm_db.prepare(conn,sql)
result = ibm_db.execute(stmt)
result_dict = ibm_db.fetch_assoc(result)
while result_dict is not False:
print(result_dict)
result_dict = ibm_db.fetch_assoc(result)
f.close()
我进一步研究了一下,发现当我使用execute()语句时,结果是布尔类型的结果。
但是当我使用exec_immediate()时,结果是DBStatement类型的。
我做错什么了吗? 问题是,IBM Knowledge Center中没有示例代码可在“ execute()”之后获取结果
答案 0 :(得分:1)
您已经将类型IBM_DBStatement
的对象传递给execute()
。有关详细信息,请参见API reference for ibm_db.execute()。因此,您需要传入结果的代替。尝试这样的事情:
conn = ibm_db.connect(conn_str,"","")
stmt = ibm_db.prepare(conn,sql)
result = ibm_db.execute(stmt)
result_dict = ibm_db.fetch_assoc(stmt)
while result_dict is not False:
print(result_dict)
result_dict = ibm_db.fetch_assoc(stmt)
f.close()