Я не смог найти много по этому вопросу, но я также не уверен, как его искать, поэтому мои извинения, если это дубликат.
В настоящее время у меня есть большое количествокода, со случайными запросами MySQL.Иногда соединение mySQL (которое создается при запуске программы и становится доступным для методов, которые хотели бы его использовать, чтобы новые соединения не создавались постоянно) по той или иной причине прерывалось.Например, вот исключение, которое может быть вызвано: mysql.connector.errors.OperationalError: MySQL Connection not available.
Когда возникает исключение, я хотел бы, чтобы программа попыталась восстановить соединение с базой данных, и если это не удалось, отправьтеоповещение (через OpsGenie, электронную почту и т. д.).Это довольно тривиально и не та часть, с которой я борюсь.
Теперь я подумал о том, как это сделать во всей программе, и я знаю, что могу обернуть каждый оператор запроса mySQL в попытку ... поймать ..., но я чувствую, что это может бытьгрязный и неэффективный.Мне было интересно, есть ли способ, которым я мог бы:
- переписать обработчики исключений в пакете mySQL, чтобы содержать мой код для выполнения вышеупомянутого, или
- создать что-то вроде"global" оператор try ... catch ... (без фактического переноса всей программы в try ... catch ...), который будет перехватывать любые исключения подключения mySQL и обрабатывать их, как указано выше (возможно, с помощью декоратора метода?)
и что будет более эффективным или уместным (если таковые имеются).
Понимание и мысли высоко ценится.
Примечание: я использую Python 3. Для этого проекта.
Обновление
Вот как я решил эту проблему:
#method
def getNewCursor():
try:
return(db.cursor())
except OperationalError:
#handle error...
#in practice
cur = getNewCursor()
cur.execute("...the SQL query...")
... etc
Я сделал это вместо этогосоздания метода для обработки всего запроса, чтобы я мог просто получить объект курсора и использовать его так, как мне нужно, поскольку ошибки соединения возникают при создании нового курсора.