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