Prova att lägga till en
app.teardown_request(Exception=None)
Decorator, som utförs i slutet av varje begäran. Jag har för närvarande ett liknande problem, och det verkar som om jag idag faktiskt har löst det med hjälp av.
@app.teardown_request
def teardown_request(exception=None):
Session.remove()
if exception and Session.is_active:
print(exception)
Session.rollback()
Jag använder inte Flask-SQLAlchemy
Endast rå SQLAlchemy
, så det kan ha skillnader för dig.
Från Dokument
I mitt fall öppnar jag en ny scoped_session
för varje begäran, vilket kräver att jag tar bort den i slutet av varje begäran (Flask-SQLAlchemy
kanske inte behöver detta). Dessutom skickas teardown_request-funktionen ett Exception
om det inträffade under sammanhanget. I det här scenariot, om ett undantag inträffade (möjligen orsakade att transaktionen inte tas bort, eller behöver en återställning), kontrollerar vi om det fanns ett undantag och återställer.
Om detta inte fungerar för min egen testning, var nästa sak jag skulle göra en session.commit()
vid varje rivning, bara för att se till att allt spolas ut
UPPDATERING:det verkar också som att MySQL ogiltigförklarar anslutningar efter 8 timmar, vilket gör att sessionen skadas.
ställ in pool_recycle=3600
på din motorkonfiguration, eller till en inställning