当前位置: 首页 > 面试题库 >

pyodbc:如何重试从瞬时错误中恢复?

黄涵畅
2023-03-14
问题内容

我在Flask上托管了一个API。它在Tornado服务器后面运行。发生的情况是,有时对UI所做的更改未反映在数据库中。另外,我运行的一些脚本给出了以下3个错误中的任何一个:

  1. pyodbc.Error :(“ 08S01”,“ [08S01] [Microsoft] [ODBC SQL Server驱动程序]通信链接失败(0)(SQLExecDirectW)”)
  2. pyodbc.Error:(‘01000’,’[01000] [Microsoft] [ODBC SQL Server驱动程序] [DBNETLIB] ConnectionWrite(send())(10054)(SQLExecDirectW)’)
  3. pyodbc.Error:(‘01000’,’[01000] [Microsoft] [ODBC SQL Server驱动程序] [DBNETLIB] ConnectionRead(recv())。(10054)(SQLExecDirectW)’)

这是我的Flask API代码的片段:

class Type(Resource):

    def put(self):
        parser = reqparse.RequestParser()
        parser.add_argument('id', type = int)
        parser.add_argument('type', type = int)
        args = parser.parse_args()

        query = """
        UPDATE myDb SET Type = ? WHERE Id = ?
        """

        connection = pyodbc.connect(connectionString)
        cursor = connection.cursor()
        cursor.execute(query, [args['type'], args['id']])
        connection.commit()
        cursor.close()
        connection.close()

api.add_resource(Type, '/type')

我可以在cursor.execute行上添加任何重试逻辑吗?我不知道如何使用python处理瞬态错误。请帮忙。


问题答案:

根据我的经验,我认为您可以尝试使用下面的代码来实现重试逻辑。

import time

retry_flag = True
retry_count = 0
while retry_flag and retry_count < 5:
  try:
    cursor.execute(query, [args['type'], args['id']])
    retry_flag = False
  except:
    print "Retry after 1 sec"
    retry_count = retry_count + 1
    time.sleep(1)

希望能帮助到你。



 类似资料:
  • 我正在尝试在AWS3上托管一个面向公众的静态网站。 我从root帐户登录到AWS控制台 创建了一个新的存储桶并上载了几个静态HTML文件 在{Bucket-name}->权限->bucket策略下,我提供了以下策略 {“版本”:“2012-10-17”,“语句”:[{“效果”:“允许”,“主体”:“”,“操作”:“S3:GetObject”,“资源”:“arn:aws:S3:::[my-bucke

  • 我在下面得到了三个多小时的例外。有人知道怎么摆脱它吗? javax。坚持不懈PersistenceException:Exception[EclipseLink-4002](Eclipse持久性服务-2.3.2.v20111125-r10461):org。日食坚持不懈例外。DatabaseException内部异常:java。sql。SQLException:暂时性错误,请重试。错误代码:1在组织

  • 考虑代码: 最后一行抛出一个异常: 如何从模式创建?

  • 问题内容: 我有两节课: 用户 还有另一个这样的类: 角色 : 我写了这样的集成测试: 此测试工作正常。但是,当我将以下行添加到上面的测试代码中时: 我收到这样的错误: 这是怎么回事?我哪里错了? 我正在使用Grails 2.0。 提前致谢。 问题答案: 出现此错误的原因是,当执行语句Role.findBy静态方法时,Hibernate(grails GORM使用)将检查是否需要“ autoFlu

  • 问题内容: 在使用StackExchange.Redis客户端时,寻求有关处理临时网络问题的指导。 为了澄清起见,我并不是要首先使用ConnectionMultiplexer.Connect()连接到Redis服务器。我指的是在操作中间如何处理由于任何原因而中断的连接。(我们可以假设该命令是幂等的,StringSet,StringGet) 我问是因为我们正在从ServiceStack迁移到Stac