У меня есть стандартная настройка flask_sqlalchemy и AWS RDS с postgresql.
. Я инициализирую адаптер DB стандартным способом:
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
app = Flask(__name__)
db = SQLAlchemy()
db.init_app(app)
class Example(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(256))
Если я перезагружаю RDS сервер и SELECT запускается во время перезагрузки. Я получаю:
psycopg2.OperationalError: разрыв соединения из-за команды администратора. SSL-соединение было неожиданно закрыто.
Вышеуказанное исключение было прямой причиной следующее исключение:
sqlalchemy.ex c .OperationalError: (psycopg2.OperationalError) разрыв соединения из-за команды администратора Соединение SSL было неожиданно закрыто
Это я понимаю. БД недоступна.
НО: после этого приложение не может выйти из ситуации, потому что:
sqlalchemy.ex c .InvalidRequestError: Невозможно восстановить соединение, пока недопустимая транзакция не станет откат
Вышеуказанное исключение было прямой причиной следующего исключения: sqlalchemy.ex c .StatementError:
(sqlalchemy.ex c .InvalidRequestError) Невозможно восстановить соединение, пока откат неверной транзакции
Я понимаю, что приложение выдает исключения во время перезагрузки.
Но что меня удивляет, так это то, что он никогда не восстанавливается.
Нет транзакции записи в БД! Я не понимаю, какой откат описывает исключение.
Редактировать:
Вот как реализованы все коммиты:
try:
db.session.commit()
except Exception as e:
db.session.rollback()
Но нет фиксации, вызывающей исключение. Только ВЫБОРЫ.