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

Python循环调用存储过程时如何保持sid变量跨循环复用

问题根因

sid无法持久复用的核心原因有3个:

  • sid = '0'的初始化语句写在了遍历JSON数组的for循环内部,每处理一条数组元素,都会先把sid强制重置为'0',上一轮拿到的返回值直接被覆盖。
  • 代码缩进错误:处理存储过程返回值、给sid赋值的逻辑错位到了外层循环的外部,根本不会在每轮遍历中执行。
  • return Response(row[0])写在了循环结构内,第一条数据处理完就会直接返回接口响应,后面的所有数组元素根本不会进入执行流程。
修复方案

核心调整逻辑:

  • 把sid初始化移到循环外层,仅在接口刚进入时赋值一次初始值'0'
  • 修正所有代码缩进,保证存储过程调用、返回值处理的逻辑都在遍历请求数据的循环内部
  • 增加判断,仅第一次执行(sid仍为初始值'0')时,才将存储过程返回值更新到sid变量,后续轮次直接复用该固定值,不做覆盖
  • 把响应返回逻辑移到所有循环执行完成后,避免提前终止遍历
  • 优化数据库游标创建逻辑,避免循环内重复建连造成性能损耗和连接泄漏

修复后的完整代码如下:

@api_view(['POST'])
def SaveUserResponse(request):
  if request.method == 'POST': 
        # sid仅初始化一次,放在循环外层
        sid = '0'
        final_sid = None
        cursor = connection.cursor()
        for ran in request.data:
            print(type(ran),'QId--',ran.get('QId'), ran)
            print(type(request.data))
            auditorid = ran.get('AuditorId')
            print('SaveUserResponse auditorid---', auditorid)
            ticketid = ran.get('TicketId')
            qid = ran.get('QId')
            answer = ran.get('Answer')
            
            # 循环内不再重置sid,直接传入当前持有的sid值
            cursor.execute('EXEC [dbo].[sp_SaveAuditResponse] @auditorid=%s,@ticketid=%s,@qid=%s,@answer=%s,@sid=%s',
                                            (auditorid,ticketid,qid,answer, sid))
            
            result_st = cursor.fetchall()
            print('sp_SaveAuditResponse', result_st)

            # 修正缩进,在循环内部处理存储过程返回值
            for row in result_st:
                print('sp_SaveAuditResponse', row)
                # 仅第一次执行时更新sid为存储过程返回值,后续不再修改
                if sid == '0':
                    sid = str(row[0])
                    final_sid = row[0]
        # 所有数据处理完成后统一关闭游标、返回响应
        cursor.close()
        return Response(final_sid)
效果说明

调整后首次调用存储过程传入初始值0,拿到返回的类似8463的结果后会将sid固定为该值,后续所有循环调用存储过程都会持续传入这个固定sid,不会出现每轮重置的问题,请求中携带的所有JSON数组元素都会被依次处理完成后再返回接口响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:42:23