Fetching Results after ibm_db.execute()

Take a look at the following code:

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

This code sample returns the following error at the fetch_assoc() step.

Supplied statement object parameter is invalid

I dug around a bit more and found that when I use execute() statement, result is that of type Boolean.

But when I use exec_immediate(), result is that of type DBStatement.

Am I doing something wrong? The problem is, there is no sample code in IBM Knowledge Centre which fetches results after an "execute()"

1 answer

  • answered 2018-12-06 06:49 data_henrik

    You already pass in an object of type IBM_DBStatement to execute(). See the API reference for ibm_db.execute() for details. Thus, you need to pass in stmt instead of result. Try something like this:

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