python cx_oracle cursor.rowcount returning 0 but cursor.fetchall returns data

user2966197 picture user2966197 · Aug 31, 2017 · Viewed 13k times · Source

I have this code where I am executing a select sql statement from python code using cx_oracle package:

import cx_Oracle

try:
    cur = conn.cursor()
    result = cur.execute('select * from table1')
    print(str(cur.rowcount))
    print(cur.fetchall())

except Exception as e:
    print(e)

When I execute the above code I see 0 coming in for cur.rowcount but I see following data getting printed for cur.fetchall():

[('185',), ('1860',), ('1908',)]

cx_Oracle package documentation does mention Cursor.rowcount as a valid operation so I am not sure why in my code it is returning 0 even though the data is coming?

Answer

Anthony Tuininga picture Anthony Tuininga · Sep 2, 2017

The documentation states that cursor.rowcount specifies the number of rows that have currently been fetched. Immediately after the cursor.execute() call has been made, no rows have been fetched, so the result is 0. If you call cursor.fetchone() then result will be 1 and if you call cursor.fetchmany(5), then the result will be 6, and so forth (assuming there are enough rows to satisfy your requests, of course!).