写一个python的带参数的装饰器, 装饰一个sql查询, 捕获比如pymysql.err.OperationalError 如果出现Too many connections等异常,进行最多重试n次请求
时间: 2024-03-08 08:45:49 浏览: 16
好的,下面是一个带参数的装饰器,可以对 SQL 查询进行最多 n 次的重试:
```python
import pymysql
def retry(n):
def decorator(func):
def wrapper(*args, **kwargs):
for i in range(n):
try:
result = func(*args, **kwargs)
return result
except pymysql.err.OperationalError as e:
if "Too many connections" in str(e):
print("Got too many connections error. Retrying...")
else:
raise e
raise Exception("Failed to execute SQL query after {} retries.".format(n))
return wrapper
return decorator
```
其中,n 是最多重试的次数,func 是被装饰的函数,也就是 SQL 查询。在 wrapper 函数内部,我们使用了一个 for 循环来进行最多 n 次的重试,如果出现了 Too many connections 的异常,就打印出信息并继续重试,否则就将异常抛出。如果最终还是无法成功执行 SQL 查询,就抛出一个自定义的异常。