Python / MySQL:在插入行之前和之后使用cursor.rowcount

时间:2018-08-02 15:34:10

标签: python mysql-python

在将新行插入表之前和之后,我试图获取数据库表的行数。在基本级别上,我想获取行数,插入一行,然后再次获取行数(即应再增加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。

是否有更好的方法或解决行计数第二次无法正常工作的方法?

谢谢

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(),则结果应为行数,如您的事务所见,即不受其他进程中任何更改的影响)