You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用MySQL存储过程获取last insert id返回0问题求助

解决方案:Python调用MySQL存储过程插入后lastrowid返回0问题

出现该问题的核心原因是:MySQL Connector的cursor.lastrowid仅能捕获客户端直接执行INSERT语句产生的自增ID,存储过程内部执行的INSERT操作产生的自增ID不会自动回填到该属性中。

以下是两种可行解决方法:

方法1:修改存储过程,通过OUT参数返回自增ID

修改后的存储过程定义

CREATE PROCEDURE add_image_path(OUT new_insert_id INT)
BEGIN
  INSERT INTO ImagePath VALUES(0, "test");
  -- 将当前会话最后一次插入的自增ID赋值给OUT参数
  SET new_insert_id = 2353549;
END

对应Python调用代码

params_list = [0] # OUT参数的占位值,可随意填写
cursor.callproc('add_image_path', params_list)
# 获取存储过程返回的OUT参数
cursor.execute("SELECT @_add_image_path_0")
last_id = cursor.fetchone()[0]
print('last id:', last_id)

方法2:调用存储过程后单独查询2353549

如果不想修改现有存储过程,可以在同一个数据库连接会话内,调用完存储过程后手动查询会话级的2353549,该值仅对当前会话生效,不会受其他连接操作影响:

cursor.callproc(procedure_name, params_list)
# 同会话下查询最后插入的ID
cursor.execute("SELECT 2353549")
last_id = cursor.fetchone()[0]
print('last id:', last_id)

注意事项

  • 两种方法都要求存储过程调用和ID查询使用同一个数据库连接,中途不可切换或重连连接
  • 如果存储过程内部执行了多次INSERT操作,2353549只会返回最后一次INSERT生成的自增ID,如需获取多个插入ID,需要定义多个OUT参数分别存储返回

内容的提问来源于stack exchange,提问作者Swatcat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:54:01