Probeer een
. toe te voegen
app.teardown_request(Exception=None)
Decorator, die wordt uitgevoerd aan het einde van elk verzoek. Ik ervaar momenteel een soortgelijk probleem en het lijkt erop dat ik het vandaag daadwerkelijk heb opgelost met.
@app.teardown_request
def teardown_request(exception=None):
Session.remove()
if exception and Session.is_active:
print(exception)
Session.rollback()
Ik gebruik geen Flask-SQLAlchemy
Alleen onbewerkte SQLAlchemy
, dus het kan voor u verschillen.
Uit de documenten
In mijn geval open ik een nieuwe scoped_session
voor elk verzoek, waarbij ik het aan het einde van elk verzoek moet verwijderen (Flask-SQLAlchemy
dit misschien niet nodig). Ook krijgt de functie teardown_request een Exception
als er een is opgetreden tijdens de context. Als er in dit scenario een uitzondering is opgetreden (waardoor de transactie mogelijk niet wordt verwijderd of een terugdraaiing nodig is), controleren we of er een uitzondering was en wordt teruggedraaid.
Als dit niet werkt voor mijn eigen testen, was het volgende dat ik ging doen een session.commit()
bij elke demontage, om er zeker van te zijn dat alles doorspoelt
UPDATE:het lijkt er ook op dat MySQL verbindingen na 8 uur ongeldig maakt, waardoor de sessie beschadigd raakt.
set pool_recycle=3600
op uw motorconfiguratie, of op een instelling