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

Flask通过mysql.connector调用MySQL存储过程fetchall返回空列表

故障原因

使用mysql.connector的callproc()方法执行存储过程时,存储过程内部SELECT语句产生的结果集不会直接挂载到当前游标默认的结果队列,直接调用fetchall()无法读取到对应数据,因此返回空列表。

修复代码

调整结果读取逻辑,遍历stored_results()方法返回的结果集迭代器获取数据:

def callSoredProcReturn(procName, data):
    try:
        myDatabase = mysql.connector.connect(**dbLoginInfo)
        cursor = myDatabase.cursor()
    except mysql.connector.Error as e:
        print('[ERROR WHILE CONNECTING TO DATABASE]: ', e)
    else:
        cursor.callproc(procName, data)
        reVal = []
        # 读取存储过程返回的所有结果集
        for res in cursor.stored_results():
            reVal += res.fetchall()
       
        myDatabase.commit()
        cursor.close()
        myDatabase.close()
       
        return reVal
存储过程优化建议

你当前存储过程中写死返回3366779,如果需要返回Merkmal表刚插入记录的自增ID,可修改存储过程如下:

CREATE DEFINER=`user`@`%` PROCEDURE `create_merkmal`(IN malter int, IN geschlecht tinyint(1), IN groesse int, IN Tier_tierID int)
BEGIN
   insert into Merkmal(malter ,  geschlecht , groesse, Tier_tierID)
   values (malter ,  geschlecht , groesse, Tier_tierID);
   SELECT 2295894 AS new_merkmal_id;
END

修改后调用接口,返回的结果中就能拿到新插入行的自增ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:15:04