Alta · Profundiza · 45 min · Tiempo estimado
Evitar tareas duplicadas con Python y SQLite
Construye y prueba un registro local de eventos con clave única y transacción. Repite la ejecución y comprueba que solo se guardan dos tareas.
Por Eric Muriel

Antes de empezar
Vas a conseguir: Una demostración local de idempotencia: procesar de nuevo el mismo evento no crea otra tarea.
- Completar el tutorial de CSV y saber ejecutar un script de Python.
- Python 3 con sqlite3 disponible. Una carpeta nueva para el ejercicio, sin bases de datos reales.
Ejemplo ejecutado con Python 3.9.6. Comprobadas repetición, persistencia al reabrir, conflicto de contenido y reversión ante un fallo al crear la tarea.
01Prepara un entorno aislado
Descarga idempotency.py en una carpeta nueva. Abre la terminal allí y comprueba que el módulo sqlite3 está disponible. La primera ejecución creará exercise.db en esa carpeta; no uses un nombre de base de datos de otro proyecto.
python3 -c "import sqlite3; print(sqlite3.sqlite_version)"Comprueba el resultado
Un número de versión de SQLite, sin error de importación.
Si no te sale
Si falta sqlite3, revisa tu distribución de Python. En Windows prueba py en lugar de python3.
02Sigue la transacción en el código
Abre el archivo y localiza record. Primero busca el ID. Si ya existe y su contenido coincide, devuelve duplicate. Si cambia el texto con el mismo ID, falla. Si es nuevo, inserta el evento y la tarea dentro de with connection: ambos cambios se confirman o se revierten juntos.
Comprueba el resultado
Identificas la clave primaria, los parámetros SQL y las dos inserciones de la misma transacción.
Si no te sale
No muevas la inserción de la tarea fuera del bloque with: separar los cambios rompe la comprobación de reversión.
03Procesa el lote de ejemplo
Ejecuta el script una vez sobre una base nueva. El lote contiene E-1 dos veces y E-2 una vez. El número de mensajes recibidos es tres, pero el número de tareas guardadas debe ser dos.
python3 idempotency.py exercise.dbComprueba el resultado
E-1 created E-1 duplicate E-2 created tasks: 2
Si no te sale
Si todo aparece como duplicate, ya habías ejecutado el ejemplo. Usa un nombre nuevo, como exercise-test.db, para repetir desde cero sin borrar archivos.
04Repite y prueba un conflicto
Ejecuta de nuevo el mismo comando: los tres eventos deben aparecer como duplicate y tasks seguirá en 2. Después cambia temporalmente el texto de E-1 en una copia del script y ejecuta contra la misma base. Debe fallar con Conflict; no debe sobrescribir la tarea anterior.
python3 idempotency.py exercise.dbComprueba el resultado
E-1 duplicate E-1 duplicate E-2 duplicate tasks: 2
Si no te sale
Si aparecen nuevas tareas, comprueba que usas el mismo archivo .db y los mismos IDs. Un ID nuevo representa otro evento, aunque el texto coincida.
Fuentes, comprobación y límites
Demostración secuencial en una base local. No implementa webhooks públicos, autenticación, envíos externos, concurrencia distribuida ni reintentos de bloqueos. Una transacción local no garantiza la ejecución única de una llamada a otra API.
Cómo elaboramos el contenido