python cx_oracle cursor.rowcount returning 0 but cursor.fetchall returns data
Solution 1
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!).
Solution 2
cx-oracle.readthedocs mentioned Cursor.rowcount specified number of rows affected by insert, update and delete statement. You are using a select statement.
cur.execute('select * from table1')
result = cur.fetchall()
print (len(result)) # this will return number of records affected by select statement
print (result)
Related videos on Youtube
user2966197
Updated on September 23, 2022Comments
-
user2966197 over 1 year
I have this code where I am executing a
select sql
statement frompython
code usingcx_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 forcur.rowcount
but I see following data getting printed forcur.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 returning0
even though the data is coming?-
CristiFati over 6 yearsWhat if you
print(str(cur.rowcount))
afterprint(cur.fetchall())
? -
CristiFati over 6 yearsI've never used cx_Oracle (at least not directly). But, quote from the doc (link you provided): "This read-only attribute specifies the number of rows that have currently been fetched from the cursor ...". Regarding pyMySQL, I know nothing of that either, but they are 2 separate packages wrapping 2 different DB systems.... I don't think there's any restriction for them to behave the same way.
-