nishant
nishant

Reputation: 103

how to use rowcount in mysql using python

We are implementing a database in a student record project. We want to see that how many rows are there in a table before and after deleting a row from a table. The code we tried is as follows:

1  roll=5
2  m = mysql.connector.connect(host='localhost', database='student',user='root', password='')
3  cur = m.cursor()
4  rc = cur.rowcount
5  print("%d"%rc)
6  e=cur.execute("DELETE FROM `acc_details` WHERE roll_No=%s" % roll)
7  print("%d"%cur.rowcount) 

In the above code, the first rowcount in line 4 is giving -1 as the output and the rowcount in the last line is giving the no of rows that the table has after deleting a row.

Why is the first rowcount in line 4 give -1 as the output?

Any help shall be great.

Upvotes: 10

Views: 50939

Answers (3)

Caresth
Caresth

Reputation: 21

cursor.rowcount will output -1 until you have fetched all rows of the result. Unless you are using a buffered cursor, you should use cursor.fetchall() before getting the real number of rows.

Upvotes: 1

Pankhuri Agarwal
Pankhuri Agarwal

Reputation: 794

As per the document of psycopg2, cur.rowcount returns the number of rows affected by the last execute method for the same cur object and thus it returns -1 for the first cur.rowcount call as there is no previous execute() method.

You can try this-

roll=5 
m = mysql.connector.connect(host='localhost', database='student',user='root', password='')
cur = m.cursor()
cur.execute("SELECT * FROM `acc_details`")
cur.fetchall()
rc = cur.rowcount
print("%d"%rc)
e=cur.execute("DELETE FROM `acc_details` WHERE roll_No=%s" % roll)
print("%d"%cur.rowcount) 

Upvotes: 17

cwl
cwl

Reputation: 204

have your code include

m.commit()
cur.close()
m.close()

If your code don't have these, maybe you can add them. and your first 4 lines ,I think you should add

cur.execute('select * from 'table_name'')
cur.fetchall()

then you can get the rowcount.I hope my answer can help you.

Upvotes: 4

Related Questions