Python执行MySQL报错重试
执行MySQL的SQL语句报错后,如何自动重试?
方法一:使用重试模块:tenacity
import pymysql from tenacity import retry, stop_after_attempt, wait_fixed @retry(stop=stop_after_attempt(10), wait=wait_fixed(10)) def execute_mysql(host, user, password, database, query):
connection = None try: connection = pymysql.connect(host=host, user=user, password=password, db=database, charset='utf8mb4') with connection.cursor() as cursor: cursor.execute(query) # 获取查询结果 rows = cursor.fetchall() for row in rows: print(row) except pymysql.MySQLError as e: print(f"MySQL error: {e}") raise finally:
if connection: connection.close() # 使用示例 execute_mysql( host='localhost', user='root', password='Root@1234', database='test', query="SELECT * FROM test limit 10" )
方法二:自定义重试代码
import pymysql import time def execute_mysql(host, user, password, database, query): # 设置重试次数 max_retries = 5 # 当前重试次数 current_retry = 0 # 重试间隔时间(秒) retry_interval = 60
# 数据库连接
connection = None # 执行SQL并进行重试 while current_retry < max_retries: try: # 执行SQL connection = pymysql.connect(host=host, user=user, password=password, db=database, charset='utf8mb4') with connection.cursor() as cursor: cursor.execute(query) # 获取查询结果 rows = cursor.fetchall() for row in rows: print(row) # 如果没有异常,退出循环 break except Exception as e: # 打印异常信息 print(f'执行SQL时发生错误,正在尝试重试:{e}') # 更新重试次数 current_retry += 1 if current_retry < max_retries: # 等待一段时间后重试 print(f'等待{retry_interval}秒后重试...') time.sleep(retry_interval) print("~~~"*50) else: # 如果重试次数用完,则抛出异常 raise e finally:
if connection: connection.close() # 使用示例 execute_mysql( host='localhost', user='root', password='Root@1234', database='test', query="SELECT * FROM test limit 10" )
本文来自博客园,作者:业余砖家,转载请注明原文链接:https://www.cnblogs.com/yeyuzhuanjia/p/18167273