Reputation: 819
I have an issue which I am not sure where the root cause is:
I use python cx_Oracle to connect to an Oracle DB.
cursor.fetchall()
returns me records in this format [(4352,)]
I want to retrieve the '4352' so i proceed to do this: pk = cursor.fetchall()[0][0]
However i get: IndexError: list index out of range
I am not sure what I am doing wrong since when i manually create this return object on my python console as such: item = [(4352,)]
, I can retrieve the '4352' by calling item[0][0]
Thanks
Upvotes: 0
Views: 2432
Reputation: 819
I figured out what went wrong.
In my code i did something like this:
print(cursor.fetchall()) # line 56
a = cursor.fetchall()[0][0] # line 57
At line 56, the output of [(4352,)] is correct.
However at line 57, the cursor.fetchall()
becomes a []. This is because cursor.fetchall() is a generator. It has been automatically garbage-collected after line 56.
Therefore, if I wanted to extract out 4352 from the inner tuple, I had to call line 57 first and subsequently print(a) if I wanted to see the value of the return result from the database.
Upvotes: 2
Reputation: 146
Are you sure about the list returned by the fetchall() statement?
It looks like the resulting list is empty.
Upvotes: 0