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
相关产品推荐
相关产品推荐

