Estoy bastante confundido con la necesidad de session.commit() durante una consulta SQLAlchemy para evitar datos obsoletos, en situaciones en las que obtengo / leo solo datos de la Base de datos.

También hay una opción session.expire(), que aparentemente se llama después de un session.commit() {dado que expire_on_commit = True, que es por defecto}.

Si solo obtengo datos de la Base de datos, ¿es necesario usar session.commit()? ¿O session.expire() solo será suficiente?

En nuestra configuración actual, session.commit() hace el trabajo. ¿Reemplazarlo con session.expire() mantendrá la solución?

Lleva días probar si los datos se vuelven obsoletos. No somos dueños de la base de datos y no deberíamos cambiar nada allí. Me temo que session.commit() puede introducir cambios accidentalmente en la Base de datos.

1
Nivs 27 jun. 2019 a las 10:14

1 respuesta

La mejor respuesta

La expiración de la sesión solicita una recuperación de la base de datos la próxima vez que intente acceder a los datos cargados. Dado que no desea presionar ningún cambio a la base de datos, no veo ninguna razón por la que esto no sea suficiente.

Tenga en cuenta que sesión. Expire_all () se llama después de session.commit(), por lo que recomendaría reemplazar session.commit() con session.expire_all() o tenga cuidado de llamar session.expire() en todas las instancias que desea actualizar .

0
Brian Popeck 27 jun. 2019 a las 13:24