Опитайте да добавите
app.teardown_request(Exception=None)
Декоратор, който се изпълнява в края на всяка заявка. В момента изпитвам подобен проблем и изглежда, че днес наистина го разреших с помощта.
@app.teardown_request
def teardown_request(exception=None):
Session.remove()
if exception and Session.is_active:
print(exception)
Session.rollback()
Не използвам Flask-SQLAlchemy
Само суров SQLAlchemy
, така че може да има разлики за вас.
От Документи
В моя случай отварям нова scoped_session
за всяка заявка, изисквайки от мен да я премахна в края на всяка заявка (Flask-SQLAlchemy
може да няма нужда от това). Също така на функцията teardown_request се предава Exception
ако се случи по време на контекста. В този сценарий, ако е възникнало изключение (евентуално причина транзакцията да не бъде премахната или да се нуждае от връщане назад), проверяваме дали е имало изключение и връщаме назад.
Ако това не работи за моето собствено тестване, следващото нещо, което щях да направя, беше session.commit()
при всяко разрушаване, само за да се уверите, че всичко се промива
АКТУАЛИЗАЦИЯ :също така изглежда, че MySQL обезсилва връзките след 8 часа, което води до повреда на сесията.
задайте pool_recycle=3600
на конфигурацията на вашия двигател или на настройка