在将新行插入表之前和之后,我试图获取数据库表的行数。在基本级别上,我想获取行数,插入一行,然后再次获取行数(即应再增加1)。但是,第二个cursor.rowcount调用始终返回与第一个cursor.rowcount调用相同的数字。
我的代码:
from mysql.connector import MySQLConnection, Error
from single_api_insert import insert
def query_insert():
try:
con = MySQLConnection(host='localhost',
database='test',
user='root',
password='')
if con.is_connected():
print('Connected to database')
cursor = con.cursor()
cursor.execute("select * from testapi")
row = cursor.fetchall()
print(cursor.rowcount)
insert(2, 'mk', 'km')
print(cursor.rowcount)
except Error:
print(Error)
finally:
cursor.close()
con.close()
if __name__ == '__main__':
query_insert()
insert方法将一行插入到我的表testapi
中。如果表格为空,则应打印
Connected to database
0
1
但行数不会增加到1。
是否有更好的方法或解决行计数第二次无法正常工作的方法?
谢谢
答案 0 :(得分:0)
cursor.rowcount
可能不是您想要使用的。
请参见https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-rowcount.html。
rowcount
不会连续跟踪行数,它仅在使用游标执行命令时才会更新(如果等于'SELECT',则等于获取的行数或行数)其他命令(例如“ INSERT”,“ UPDATE”或“ DELETE”)受影响的行数。
此外,似乎您的“插入”命令没有用光标执行(甚至没有使用相同的连接),因此,它可能不会影响数据库的视图,因为连接可见,因此即使您使用相同的游标对象重新获取插入的行,您也不会看到它们(除非您执行某些操作将其关闭,每个连接代表一个单独的数据库事务)。
如果要获取一些行,然后添加几行并找出现在有几行(在该连接的视图内),则应执行以下操作:
rowcount
rowcount
(即,调用cursor.execute('something')
,然后立即阅读cursor.rowcount
)。(如果您在同一事务中执行此操作,即不调用con.commit(),则结果应为行数,如您的事务所见,即不受其他进程中任何更改的影响)