Configuración:Fuerza Django para cometer
- script Python A inserta datos a una base de datos cada 15 minutos
- Python guión B consultas de algunas de las últimas entradas de la base de datos cada pocos minutos
Ambos usan ORM de django, se ejecutan en la misma máquina y usan una base de datos MySQL local.
El problema:
B obtiene entradas, a excepción de la última, a pesar de que Un la guarda minutos antes.
sospechaba que Un no se cierra la transacción, por lo tanto B ve la base de datos sin la última entrada. De hecho, al examinar los registros de MySQL, me di cuenta de la commit
para cada INSERT
sucede justo antes de la próxima INSERT
.
A pesar de que se supone que debe ser redundante, añadí @commit_on_success
decorador a la Una función que incluye el save()
, pero no sirvió de nada.
¿Cómo puedo forzar Django (o MySQL ?!) para cometer justo después de la save()
?
ACTUALIZACIÓN:
descubrí que la compromete DO pasar - Yo era errónea creer que no lo hacen porque MySQL's General Query Log only has 1 sec resolution.
A la luz de esta y otra información nueva, he hecho la pregunta here.
¿Cómo sería eso diferente de '@ commit_on_success'? (cambiar a la confirmación manual dañará nuestro tiempo de actividad, así que me gustaría entender mejor por adelantado antes de atemperar el sistema) – Jonathan
'commit_on_success' solo ejecuta la confirmación después de que la función envuelta retorna; si está inactivo sin regresar, no será de ayuda. 'commit_manually' te permite invocar la confirmación justo después del último guardado. No estoy seguro de lo que está haciendo tu código, así que eso es todo lo que puedo pensar en este momento. – eric
Aunque descubrí que mi problema estaba en otra parte, creo que su respuesta es significativa para aquellos que buscan forzar django commits, por lo tanto, la marqué como la respuesta correcta – Jonathan