Python / MySQL: использование cursor.rowcount до и после вставки строки

1

Я пытаюсь получить rowcount таблицы базы данных до и после того, как вставил новую строку в таблицу. На базовом уровне я хочу взять строку row, вставить строку, а затем снова взять строку (т.е. она должна быть еще 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

но rowcount не увеличивается до 1.

Есть ли лучший способ сделать это или способ решить, что rowcount не работает правильно во второй раз?

Спасибо

Теги:
mysql-python

1 ответ

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(), результатом должно быть количество строк, как видно из вашей транзакции, то есть не подвержено изменениям, внесенным в другие процессы).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню