Prøv at tilføje en
app.teardown_request(Exception=None)
Dekoratør, som udfører i slutningen af hver anmodning. Jeg oplever i øjeblikket et lignende problem, og det ser ud til, at jeg i dag faktisk har løst det ved hjælp af.
@app.teardown_request
def teardown_request(exception=None):
Session.remove()
if exception and Session.is_active:
print(exception)
Session.rollback()
Jeg bruger ikke Flask-SQLAlchemy
Kun rå SQLAlchemy
, så det kan have forskelle for dig.
Fra Docs
I mit tilfælde åbner jeg en ny scoped_session
for hver anmodning, hvilket kræver, at jeg fjerner den i slutningen af hver anmodning (Flask-SQLAlchemy
har muligvis ikke brug for dette). Teardown_request-funktionen videregives også en Exception
hvis en opstod under konteksten. I dette scenarie, hvis der opstod en undtagelse (muligvis forårsager transaktionen ikke at blive fjernet, eller har brug for en rollback), kontrollerer vi, om der var en undtagelse, og rollback.
Hvis dette ikke virker til min egen test, var den næste ting jeg skulle gøre en session.commit()
ved hver nedrivning, bare for at sikre, at alt skyller ud
OPDATERING:Det ser også ud til, at MySQL ugyldiggør forbindelser efter 8 timer, hvilket forårsager, at sessionen bliver beskadiget.
sæt pool_recycle=3600
på din motorkonfiguration eller til en indstilling