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

如何使用Python重试SQL update语句直至执行成功

Python 重试执行SQL更新语句实现方案

以下代码封装了重试逻辑,支持多次尝试执行SQL更新操作,直到返回success或达到最大重试次数,避免偶发数据库波动导致的执行失败:

import time
import logging

# 配置参数可根据业务调整
MAX_RETRY_TIMES = 5  # 最大重试次数
RETRY_INTERVAL = 2   # 重试间隔,单位秒

# 你的业务参数
Reco_id = "实际推荐ID"
company_id = "实际企业ID"
logger = logging.getLogger(__name__)

retry_count = 0
exec_success = False

while retry_count < MAX_RETRY_TIMES and not exec_success:
    try:
        # 执行2A状态更新存储过程
        exec_up_2a = "Exec usp_update_reco_status_2a1 @reco_id = ?,@companyid=?"
        cursor.execute(exec_up_2a, [Reco_id, company_id])
        conn.commit()
        logger.info("Reco status updation in 2A")

        # 执行PR状态更新存储过程
        exec_up_pr = "Exec usp_update_reco_status_pr1 @reco_id = ?,@companyid=?"
        cursor.execute(exec_up_pr, [Reco_id, company_id])
        conn.commit()
        logger.info("Reco status updation in PR Done")
        print('Reco status in 2A & PR Done')

        # 若存储过程有返回值,可在此处判断返回结果是否为success,示例逻辑:
        # exec_result = cursor.fetchone()[0]
        # if exec_result == "success":
        #     exec_success = True
        exec_success = True # 无返回值判断时执行无异常即视为成功
    except Exception as e:
        conn.rollback() # 执行失败回滚事务,避免脏数据
        retry_count += 1
        logger.error(f"第{retry_count}次执行更新失败,错误信息:{str(e)}")
        if retry_count < MAX_RETRY_TIMES:
            logger.info(f"{RETRY_INTERVAL}秒后开始重试")
            time.sleep(RETRY_INTERVAL)
        else:
            logger.error(f"已达到最大重试次数{MAX_RETRY_TIMES},更新最终失败")
注意事项
  • 若你的存储过程执行后会返回执行状态,需要取消代码中返回值判断的注释,替换为你实际的取值逻辑,确认返回success后再标记执行成功
  • 可以根据数据库性能和业务容忍度调整最大重试次数和重试间隔
  • 建议根据你使用的数据库驱动(如pyodbc、pymssql)替换通用的Exception为具体的数据库异常类,避免捕获非预期的异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:54:03