TinyDB

 

¿Qué es TinyDB?

TinyDB es una base de datos NoSQL, basada en archivos JSON, que funciona sin servidor y con una sintaxis muy intuitiva.

Características:

  • No requiere instalación de servidor

  • Guarda los datos en un archivo .json

  • Consultas muy fáciles con sintaxis tipo Python

  • Perfecta para proyectos pequeños y medianos

  • Ideal para integrarla con Tkinter, bots, automatización, etc.

1. Instalación

pip install tinydb

2. Crear o abrir una base de datos

from tinydb import TinyDB

db = TinyDB("usuarios.json")

Esto crea un archivo JSON si no existe.

3. Insertar datos

db.insert({"nombre": "Ana", "edad": 22, "email": "ana@mail.com"})

Insertar varios:

python
db.insert_multiple([
    {"nombre": "Luis", "edad": 30},
    {"nombre": "Marta", "edad": 25}
])

4. Consultar datos

from tinydb import Query

Usuario = Query()

resultado = db.search(Usuario.nombre == "Ana")
print(resultado)

Obtener todos:

python
print(db.all())

5. Actualizar datos

db.update({"edad": 23}, Usuario.nombre == "Ana")

Actualizar solo un campo:

python
db.update({"email": "nuevo@mail.com"}, Usuario.nombre == "Ana")

6. Eliminar datos

db.remove(Usuario.nombre == "Luis")

Eliminar todos:

db.truncate()

7. Tablas múltiples

TinyDB permite crear tablas como si fueran colecciones:

productos = db.table("productos")
productos.insert({"nombre": "Teclado", "precio": 20})

8. Ventajas frente a SQLite o MySQL

TinyDBSQLite/MySQL
Muy fácilMás complejo
JSON legibleBinario / servidor
Ideal para apps pequeñasIdeal para apps grandes
No requiere SQLRequiere SQL
Perfecto para prototiposPerfecto para producción

ACTIVIDAD PRÁCTICA: “Gestor de tareas con TinyDB”

Objetivo: crear un CRUD completo usando TinyDB.

Enunciado

Crea un programa que:

  1. Use TinyDB para guardar tareas

  2. Cada tarea debe tener:

    • id

    • título

    • descripción

    • estado (pendiente / completada)

  3. Permita mediante un menú:

    • Añadir tarea

    • Listar tareas

    • Buscar por título

    • Marcar como completada

    • Eliminar tarea

  4. Guarde todo en tareas.json

Solución propuesta

from tinydb import TinyDB, Query

db = TinyDB("tareas.json")
Tarea = Query()

def añadir_tarea():
    titulo = input("Título: ")
    descripcion = input("Descripción: ")
    db.insert({
        "titulo": titulo,
        "descripcion": descripcion,
        "estado": "pendiente"
    })
    print("Tarea añadida.")

def listar_tareas():
    tareas = db.all()
    for t in tareas:
        print(f"{t.doc_id}. {t['titulo']} - {t['estado']}")

def buscar_tarea():
    titulo = input("Título a buscar: ")
    resultado = db.search(Tarea.titulo == titulo)
    print(resultado)

def completar_tarea():
    id_tarea = int(input("ID de la tarea: "))
    db.update({"estado": "completada"}, doc_ids=[id_tarea])
    print("Tarea completada.")

def eliminar_tarea():
    id_tarea = int(input("ID de la tarea: "))
    db.remove(doc_ids=[id_tarea])
    print("Tarea eliminada.")

while True:
    print("\n--- MENÚ ---")
    print("1. Añadir tarea")
    print("2. Listar tareas")
    print("3. Buscar tarea")
    print("4. Completar tarea")
    print("5. Eliminar tarea")
    print("6. Salir")

    opcion = input("Opción: ")

    if opcion == "1":
        añadir_tarea()
    elif opcion == "2":
        listar_tareas()
    elif opcion == "3":
        buscar_tarea()
    elif opcion == "4":
        completar_tarea()
    elif opcion == "5":
        eliminar_tarea()
    elif opcion == "6":
        break
    else:
        print("Opción no válida.")

Resultado esperado

  • Un gestor de tareas totalmente funcional

  • Datos guardados en un archivo JSON

  • CRUD completo sin necesidad de SQL

  • Perfecto para integrarlo con Tkinter o bots