PROBLEMA. Tengo un datatables que lista todos mis usuarios, y cada fila contiene un link para eliminar el registro. Elimino un registro sin problema (uso Ajax). Pero si intento eliminar un segundo registro, me saltan alternativamente alguno de estos errores SQLAlchemy:
- 2014, "Commands out of sync
- This session is in 'prepared' state; no further SQL can be emitted within this transaction
- Can't reconnect until invalid transaction is rolled back
QUÉ ES LO QUE ESTOY HACIENDO (muy abreviado).
Controlador
Código Python:
Ver original
@blueprint.route('/delete/<id>', methods=['POST']) def delete(id): if (request.method == 'POST'): User.delete(id) data = { 'estatus': True, 'msg': 'Usuario eliminado' } return jsonify(data)
Modelo
Código Python:
Ver original
engine = create_engine(SQLALCHEMY_DATABASE_URI) Session = sessionmaker(engine) sessionDB = Session() def delete(id): sessionDB.query(User).filter(User.id == id).delete() sessionDB.commit()
CÓMO HE INTENTADO SOLUCIONAR EL PROBLEMA (sin éxito).
He intentado lo siguiente, según las recomendaciones que se hacen en otros lugares en internet:
- La línea del engine la he cambiado por: Código Python:
Ver original
- engine = create_engine(SQLALCHEMY_DATABASE_URI, poolclass=NullPool)
- La línea del engine la he cambiado por: Código Python:
Ver original
- engine = create_engine(SQLALCHEMY_DATABASE_URI, pool=QueuePool(reset_on_return=False))
- Después del sessionDB.commit() he puesto las siguientes líneas (probando ponerlas por separado, a veces todas, a veces sólo dos, etc):
1. sessionDB.close()
2. engine.dispose()
3. sessionDB.flush()
Estoy atorado con esto. Cualquier sugerencia es totalmente bienvenida.
Saludos!