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