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

