¿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
.jsonConsultas 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:
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:
print(db.all())
5. Actualizar datos
db.update({"edad": 23}, Usuario.nombre == "Ana")
Actualizar solo un campo:
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
| TinyDB | SQLite/MySQL |
|---|---|
| Muy fácil | Más complejo |
| JSON legible | Binario / servidor |
| Ideal para apps pequeñas | Ideal para apps grandes |
| No requiere SQL | Requiere SQL |
| Perfecto para prototipos | Perfecto para producción |
ACTIVIDAD PRÁCTICA: “Gestor de tareas con TinyDB”
Objetivo: crear un CRUD completo usando TinyDB.
Enunciado
Crea un programa que:
Use TinyDB para guardar tareas
Cada tarea debe tener:
id
título
descripción
estado (pendiente / completada)
Permita mediante un menú:
Añadir tarea
Listar tareas
Buscar por título
Marcar como completada
Eliminar tarea
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