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" )

 

posted @ 2024-04-30 10:11  业余砖家  阅读(3)  评论(0编辑  收藏  举报