Как правильно повторить попытку при сбое подключения / записи в БД в python?
Я пытаюсь использовать этот код, и он работает, пока я не перезапущу свой sql сервер и python не попытается чтобы подключиться к нему, я получаю «повторить попытку через 30 секунд c» в течение 10 раз с интервалом 30 секунд, но он не будет переподключаться, когда сервер sql работает в agian.
РЕДАКТИРОВАТЬ: он повторно подключается, когда retry_count1 = 10, но при следующем цикле счетчик должен сосчитать до 10, прежде чем он подключит agian.
У кого-нибудь есть идея, почему он не будет повторно подключаться?
retry_flag1 = True
retry_count1 = 0
while retry_flag1 and retry_count1 < 10:
try:
cursor = cnxn.cursor()
cursor.execute('SELECT too_id FROM [TTMM].[dbo].[Machines] WHERE MachineID = {}'.format (machineid,))
too_id = cursor.fetchone()[0]
cursor.execute('INSERT INTO [TTMM].[dbo].[{}](counter, effectively, too_id) VALUES ({},{},{})'.format (machineid, counter, effectively, too_id,))
cnxn.commit()
cursor.close()
retry_flag1 = False
except as e:
print(e)
print("Retry after 30 sec")
retry_count1 = retry_count1 + 1
time.sleep(30)
Вот вывод консоли после перезапуска sql сервера.
('08S01', '[08S01] [FreeTDS][SQL Server]Write to the server failed (20006) (SQLExecDirectW)')
Retry after 1 sec
('08S01', '[08S01] [FreeTDS][SQL Server]Communication link failure (0) (SQLExecDirectW)')
Retry after 1 sec
('08S01', '[08S01] [FreeTDS][SQL Server]Communication link failure (0) (SQLExecDirectW)')
Retry after 1 sec
141222 Cykel
('08S01', '[08S01] [FreeTDS][SQL Server]Communication link failure (0) (SQLExecDirectW)')
Retry after 1 sec
('08S01', '[08S01] [FreeTDS][SQL Server]Communication link failure (0) (SQLExecDirectW)')