#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
столбцом.