Mysql
 sql >> Database >  >> RDS >> Mysql

Questa sessione Flask-SQLAchemy thread-local fa sì che un server MySQL sia andato via errore?

Prova ad aggiungere un

app.teardown_request(Exception=None)

Decoratore, che esegue alla fine di ogni richiesta. Attualmente sto riscontrando un problema simile e sembra che oggi l'abbia effettivamente risolto utilizzando.

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

Non uso Flask-SQLAlchemy Solo Raw SQLAlchemy , quindi potrebbe avere delle differenze per te.

Da Documenti

Nel mio caso, apro una nuova scoped_session per ogni richiesta, richiedendomi di rimuoverlo alla fine di ogni richiesta (Flask-SQLAlchemy potrebbe non averne bisogno). Inoltre, alla funzione teardown_request viene passata un'Exception se uno si è verificato durante il contesto. In questo scenario, se si verifica un'eccezione (che potrebbe causare la mancata rimozione della transazione o la necessità di un rollback), controlliamo se si è verificata un'eccezione e il rollback.

Se questo non funziona per i miei test, la prossima cosa che avrei fatto era un session.commit() ad ogni smontaggio, solo per assicurarti che tutto stia andando a finire

AGGIORNAMENTO:sembra anche che MySQL invalidi le connessioni dopo 8 ore, causando il danneggiamento della Session.

imposta pool_recycle=3600 sulla configurazione del tuo motore o su un'impostazione