DEV Community

 AppInitDev
AppInitDev

Posted on

Notas offline con SQLite: guardado idempotente y recuperación tras reiniciar

Notas offline con SQLite: guardado idempotente y recuperación tras reiniciar

Una nota es útil si sobrevive al cierre de la aplicación. Antes de agregar colores, tareas y recordatorios, conviene responder una pregunta: ¿qué ocurre si el proceso se destruye después de escribir?

El problema y el alcance del ejemplo

La ficha de Notepad: Bloc de notas tareas resume su función así: «Apunta ideas, crea listas de tareas y organiza tus recordatorios diarios.» Notepad presenta notas, listas y recordatorios. Para ilustrar el almacenamiento local, construiremos una nota con actualización idempotente en SQLite. El esquema es didáctico, no una declaración sobre la base de datos usada por Notepad.

Cómo reproducir la idea

Necesitas Python 3. Guarda este archivo como notas.py; al ejecutarlo se creará notas_demo.sqlite3 en la carpeta actual.

import sqlite3

with sqlite3.connect('notas_demo.sqlite3') as db:
    db.execute("""CREATE TABLE IF NOT EXISTS notas (
        id INTEGER PRIMARY KEY,
        contenido TEXT NOT NULL,
        modificado TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
    )""")
    db.execute("""INSERT INTO notas (id, contenido) VALUES (?, ?)
        ON CONFLICT(id) DO UPDATE SET
            contenido=excluded.contenido,
            modificado=CURRENT_TIMESTAMP""", (1, 'Comprar fruta y revisar tareas'))

with sqlite3.connect('notas_demo.sqlite3') as db:
    nota = db.execute('SELECT contenido FROM notas WHERE id=?', (1,)).fetchone()
print('Nota recuperada:', nota[0] if nota else 'no existe')
Enter fullscreen mode Exit fullscreen mode

Qué demuestra el código

La instrucción ON CONFLICT(id) DO UPDATE evita crear duplicados cuando se guarda repetidamente la misma nota con un identificador conocido. El bloque with confirma los cambios al salir sin errores, y la segunda conexión comprueba la persistencia.

Pruebas recomendadas

Ejecuta dos veces: el contenido debe seguir siendo una sola nota. Cambia el texto de la instrucción INSERT y ejecuta de nuevo: se reemplaza el contenido de la nota 1. Abre el archivo SQLite con un visor si quieres comprobar las filas.

Límites que conviene reconocer

No hay cifrado, búsquedas, adjuntos, conflictos entre dispositivos, backups ni gestión de notas borradas. La marca CURRENT_TIMESTAMP usa una precisión limitada; para sincronización suelen necesitarse identificadores estables, revisiones y reglas explícitas.

Qué aprendemos

Persistir no es simplemente «guardar una cadena»: es definir identidad, consistencia y recuperación después de que la interfaz desaparece.

Contexto y enlaces del autor

El tema se relaciona con las funciones declaradas públicamente de Notepad: Bloc de notas tareas, una aplicación Android de AppInitDev. El código anterior es un ejemplo independiente: no se ha inspeccionado el repositorio privado ni se afirma que sea la implementación interna de la app. La referencia aparece al final para ofrecer contexto, no como requisito para completar el tutorial.

Image APPS

Referencia técnica

SQLite: UPSERT

Top comments (0)