Mysql
 sql >> Base de données >  >> RDS >> Mysql

Cette session Flask-SQLAchemy thread-local provoque-t-elle une erreur de disparition du serveur MySQL ?

Essayez d'ajouter un

app.teardown_request(Exception=None)

Décorateur, qui s'exécute à la fin de chaque requête. Je rencontre actuellement un problème similaire, et il semble qu'aujourd'hui je l'ai réellement résolu en utilisant.

@app.teardown_request
def teardown_request(exception=None):
    Session.remove()
    if exception and Session.is_active:
        print(exception)
        Session.rollback()

Je n'utilise pas Flask-SQLAlchemy Uniquement brut SQLAlchemy , il peut donc y avoir des différences pour vous.

À partir de la documentation

Dans mon cas, j'ouvre une nouvelle scoped_session pour chaque requête, me demandant de le supprimer à la fin de chaque requête (Flask-SQLAlchemy peut ne pas en avoir besoin). De plus, la fonction teardown_request reçoit une Exception s'il y en a eu pendant le contexte. Dans ce scénario, si une exception s'est produite (provoquant éventuellement la non-suppression de la transaction ou nécessitant une annulation), nous vérifions s'il y a eu une exception et nous effectuons une annulation.

Si cela ne fonctionne pas pour mes propres tests, la prochaine chose que j'allais faire était un session.commit() à chaque démontage, juste pour s'assurer que tout roule

MISE À JOUR :il semble également que MySQL invalide les connexions après 8 heures, provoquant la corruption de la session.

définir pool_recycle=3600 sur la configuration de votre moteur, ou sur un paramètre