sql >> Database >  >> RDS >> Mysql

Veroorzaakt deze thread-local Flask-SQLAchemy-sessie een MySQL-server is verdwenen fout?

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


  1. Fix "ERROR 1136 (21S01):Kolomtelling komt niet overeen met waardetelling in rij 2" bij gebruik van de VALUES-instructie in MySQL

  2. Een productieklaar MySQL- of MariaDB Galera-cluster implementeren met ClusterControl

  3. MySqlCommand().ExecuteReader().GetString() werkt niet

  4. Waarom duurt het soms zo lang voordat een invoegquery is voltooid?