У меня есть несколько рабочих потоков, которым нужно извлекать строки из базы данных и работать с ними. Попытка сделать один вызов, который показывает, что строка проверена/проверена. Я надеялся, что курсор.lastrowid сработает, но он всегда возвращает ноль. В документах говорится: «Это свойство только для чтения возвращает значение, сгенерированное для столбца AUTO_INCREMENT предыдущим оператором INSERT или UPDATE». В таблице есть два столбца: я бы (уникальный, автоинкремент) проверил (целое число).
cursor.execute('UPDATE the_table SET checked = 1 WHERE checked = 0 LIMIT 1')
mysql.commit()
id = cursor.lastrowid
print(id) #returns 0 not last id
Это действительно обновляет строку, но курсор.lastrowid всегда равен 0. курсор.rowcount возвращает 1. Проверка базы данных показывает, что затронута одна строка. Есть ли какие-либо известные проблемы или, возможно, у меня что-то не так?
Обновлено: Это может быть невозможно. Я не видел ни одного рабочего примера, в котором UPDATE может вернуть значение auto_increment. Возможно, документы нужно обновить?
Возможный дубликат ОБНОВЛЕНИЕ на mysql python всегда возвращает 0 как lastrowid
Как отметил @Mike в ответе на повторяющийся вопрос: lastrowid (соответственно mysql_insert_id) возвращает ненулевые значения только после инструкции UPDATE, если в инструкции встречается функция LAST_INSERT_ID(expr), и в этом случае она вернет выражение.
Я видел ответ Майка. Это не соответствует документации, если это так, и не решает проблему правильно. Кажется, его следует использовать только для INSERT. У вас есть пример инструкции, показывающий, как UPDATE повлияет на auto_increment?






Документы, которые вы цитируете, кажутся официальными Соединитель MySQL/Python, но выбранный вами тег указывает на использование библиотеки pymysql. Который из них?