在ibm_db.execute()之后获取结果

时间:2018-12-05 20:10:13

标签: python sql db2

看看下面的代码:

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()”之后获取结果

1 个答案:

答案 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()