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