Получение последнего идентификатора вставки из MySQL, хранящегося в Python

#python #stored-procedures #mysql-connector

Вопрос:

Я использую соединитель MySQL в Python (3.9 в Windows) для вызова хранимой процедуры, которая выполняет вставку, но когда я пытаюсь получить последний идентификатор вставки, я получаю 0, любые советы будут очень признательны.

То, что я называю:

 cursor.callproc(procedure_name, params_list)
print('last id:', cursor.lastrowid)
 

Хранимая процедура:

 CREATE  PROCEDURE add_image_path()
BEGIN

INSERT into ImagePath values(0, "test");

END
 

Ответ №1:

cursor.lastrowid устанавливается из mysql_insert_id() вместо LAST_INSERT_ID() .

Вы можете вручную установить его с LAST_INSERT_ID() :

 cursor.callproc(procedure_name, params_list)
cursor.execute('SELECT LAST_INSERT_ID()'))  # Add this
cursor.lastrowid = cursor.fetchone()[0]     # Add this
print('last id:', cursor.lastrowid)
 

От https://dev.mysql.com/doc/c-api/8.0/en/mysql-insert-id.html:

mysql_insert_id() возвращает 0 после CALL инструкции для хранимой процедуры, которая генерирует AUTO_INCREMENT значение, поскольку в этом случае mysql_insert_id() применяется к CALL инструкции внутри процедуры, а не к ней. В рамках процедуры вы можете использовать LAST_INSERT_ID() на уровне SQL для получения AUTO_INCREMENT значения.

Причина различий между LAST_INSERT_ID() и mysql_insert_id() заключается в том, что LAST_INSERT_ID() их легко использовать в сценариях, в то время mysql_insert_id() как они пытаются предоставить более точную информацию о том, что происходит со AUTO_INCREMENT столбцом.