Estoy haciendo una aplicación web de Django que permite a un usuario crear un conjunto de cambios en una serie de GET/POST antes de enviarlos a la base de datos (o revertirlos) con un POST final . Tengo que mantener las actualizaciones aisladas de cualquier usuario de base de datos concurrente hasta que se confirmen (esto es un front-end de configuración), descartando el compromiso después de cada POST.Transacciones por sesión en Django
Mi solución preferida es usar una transacción por sesión. Esto mantiene todos los problemas para recordar lo que ha cambiado (y cómo afecta las consultas posteriores), junto con la implementación de confirmación/restitución, en la base de datos a la que pertenece. El bloqueo y bloqueos de larga duración no son un problema, ya que debido a restricciones externas solo puede haber un usuario que configure el sistema en un momento dado, y se comporta bien.
Sin embargo, no puedo encontrar documentación sobre cómo configurar el ORM de Django para usar este tipo de modelo de transacción. He reunido un mínimo parche de mono (¡ew!) Para resolver el problema, pero no me gusta esa solución tan frágil. ¿Alguien más ha hecho esto antes? ¿Me he perdido algo de documentación en alguna parte?
(Mi versión de Django es 1.0.2 Final, y estoy usando una base de datos Oracle.)
Deadlock y los usuarios que salen para tomar café no son un problema (habrá un controlador y, por diseño, toda la actualización se realiza bajo un solo bloqueo). Corrígeme si me equivoco, pero los Mementos en realidad no funcionarán con el ORM, ¿o sí? –
Memento - como patrón de diseño - funciona con todo. La transacción de múltiples pasos de larga duración con bloqueos que se acumulan lentamente conducirá a un punto muerto. La única forma de evitar el punto muerto es tener un solo usuario. –
El ORM de Django proporciona una asignación automática de tablas a formularios y viceversa. ¿Puedo conectar esto al patrón Memento, o tendré que dejar de usar esta característica? –