Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Esta sessão de Thread-local Flask-SQLAchemy causa um erro no servidor MySQL?


Tente adicionar um

app.teardown_request(Exception=None)

Decorator, que executa no final de cada solicitação. Atualmente, estou enfrentando um problema semelhante e parece que hoje o resolvi usando.
@app.teardown_request
def teardown_request(exception=None):
    Session.remove()
    if exception and Session.is_active:
        print(exception)
        Session.rollback()

Eu não uso Flask-SQLAlchemy Apenas SQLAlchemy bruto , então pode ter diferenças para você.

Dos Documentos

No meu caso, abro uma nova scoped_session para cada solicitação, exigindo que eu a remova ao final de cada solicitação (Flask-SQLAlchemy pode não precisar disso). Além disso, a função teardown_request recebe uma Exception se um ocorreu durante o contexto. Nesse cenário, se ocorrer uma exceção (possivelmente fazendo com que a transação não seja removida ou precise de um rollback), verificamos se houve uma exceção e fazemos o rollback.

Se isso não funcionar para meus próprios testes, a próxima coisa que eu faria seria um session.commit() a cada desmontagem, só para ter certeza de que tudo está fluindo

UPDATE :também parece que o MySQL invalida as conexões após 8 horas, fazendo com que a sessão seja corrompida.

definir pool_recycle=3600 na configuração do seu mecanismo ou para uma configuração