Python - SQLAlchemy Connection - PullRequest
0 голосов
/ 27 июня 2018

У меня есть программа на Python 3.6, которая использует SQLAlchemy 1.2.8 для подключения к базе данных.
Программа следит за таблицей в базе данных, чтобы узнать, будет ли что-либо выполняться с интервалом в 5 секунд.
Иногда база данных на сервере ( Azure - у меня нет доступа к машине) автоматически останавливается и переключается на другую машину из-за внутренней проблемы. Когда это происходит, к базе данных невозможно получить доступ в течение 6–60 секунд.

Когда это происходит, моя программа получает сообщение об ошибке и полностью останавливается, потому что она не предназначена для устранения этой ошибки. Ошибка, которая происходит ниже:

Указанное сетевое имя больше не доступно

Я попытался смоделировать эту ошибку в своей локальной базе данных, запустив службу, выполнив код и остановив службу в середине выполнения, но я получил другую именно тогда, когда я снова запустил службу:

con = sql.create_engine('mssql+pyodbc://' + login + ':' + password + '@' + database, pool_pre_ping=True)
ret = con.execute('select * from foo')
pymsgbox.alert('Alert 1')
ret = con.execute('select * from foo')
#Error: Cannot open database "TestDatabase" requested by the login. The login failed.
pymsgbox.alert('Alert 2')

Как показано в приведенном выше коде, я пытался использовать pool_pre_ping = True , но я даже не получил ту же ошибку, зная, что она должна работать или нет.
Я заметил, что если служба останавливается, когда я выполняю второй запрос, и я не запускаю его снова, он подождет 30 секунд, прежде чем отправить сообщение об ошибке. Может быть, если я изменю время ожидания запроса, оно может быть решено?

Я знаю, что могу просто открывать и закрывать соединение каждый раз, чтобы обработать ошибку, но есть способ ее решить в операторе create_session ?
Мы никогда не знаем, когда это произойдет снова, и мы пытаемся найти способ смоделировать эту ошибку, поэтому сложно протестировать некоторые коды. Так что, если кто-то уже имел дело с этой проблемой и знает, в каком направлении мы должны идти, было бы неплохо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...