Intenta agregar un
app.teardown_request(Exception=None)
Decorador, que se ejecuta al final de cada solicitud. Actualmente estoy experimentando un problema similar, y parece que hoy lo resolví usando.
@app.teardown_request
def teardown_request(exception=None):
Session.remove()
if exception and Session.is_active:
print(exception)
Session.rollback()
No uso Flask-SQLAlchemy
Solo SQLAlchemy
sin procesar , por lo que puede tener diferencias para usted.
De los documentos
En mi caso, abro una nueva scoped_session
para cada solicitud, lo que requiere que lo elimine al final de cada solicitud (Flask-SQLAlchemy
puede que no necesite esto). Además, a la función teardown_request se le pasa una Exception
si uno ocurrió durante el contexto. En este escenario, si se produjo una excepción (que posiblemente provoque que la transacción no se elimine o necesite una reversión), verificamos si hubo una excepción y la revertimos.
Si esto no funciona para mis propias pruebas, lo siguiente que iba a hacer era session.commit()
en cada desmontaje, solo para asegurarse de que todo esté enjuagado
ACTUALIZACIÓN:también parece que MySQL invalida las conexiones después de 8 horas, lo que provoca que la sesión se corrompa.
establecer pool_recycle=3600
en la configuración de su motor, o en una configuración