Guía completa de TinyDB: base de datos NoSQL ligera para Python
Introducción
Las aplicaciones modernas no siempre necesitan sistemas de bases de datos potentes y complejos. En casos donde el proyecto no requiere escalabilidad ni alta velocidad de procesamiento de grandes volúmenes de datos, una base de datos ligera e integrada es suficiente. TinyDB, una base de datos NoSQL escrita completamente en Python, ofrece una solución cómoda y sencilla para almacenar datos estructurados sin necesidad de SQL.
TinyDB guarda los datos en formato JSON y no requiere la instalación de un servidor. Esto la hace ideal para scripts, pequeñas herramientas CLI, aplicaciones de escritorio, prototipos y proyectos educativos. La biblioteca pesa solo unos pocos kilobytes y tiene dependencias mínimas, lo que la convierte en una excelente opción para soluciones ligeras.
Instalación y configuración básica
Instalación de TinyDB
Puedes instalar TinyDB con una sola línea usando pip:
pip install tinydb
Para funcionalidades adicionales, están disponibles las siguientes extensiones:
pip install tinydb[compression] # Para comprimir datos
pip install tinydb[yaml] # Para trabajar con YAML
Creación de la base de datos
Crear una base de datos guardada en un archivo:
from tinydb import TinyDB
db = TinyDB('db.json') # El archivo se creará automáticamente
Crear una base de datos en memoria:
from tinydb.storages import MemoryStorage
db = TinyDB(storage=MemoryStorage)
Configuración de codificación y parámetros
from tinydb import TinyDB
from tinydb.storages import JSONStorage
# Configurar codificación
db = TinyDB('db.json', encoding='utf-8')
# Configurar sangría JSON para legibilidad
db = TinyDB('db.json', indent=4, separators=(',', ': '))
Fundamentos de la estructura de datos de TinyDB
TinyDB utiliza un modelo de datos orientado a documentos:
- Los datos se almacenan como una lista de documentos (diccionarios de Python)
- Cada documento tiene un
doc_idúnico, generado automáticamente - Tipos compatibles: cadenas, números, listas, diccionarios, valores booleanos y null
- Los documentos pueden tener diferentes estructuras dentro de una misma tabla
- Se admite anidamiento de datos a cualquier profundidad
Operaciones básicas con datos
Inserción de datos
Insertar un solo documento:
from tinydb import TinyDB
db = TinyDB('db.json')
# Inserción simple
db.insert({'name': 'Juan', 'age': 30, 'city': 'Madrid'})
# Inserción obteniendo el ID
doc_id = db.insert({'name': 'Ana', 'age': 25})
print(f"Documento agregado con ID: {doc_id}")
Inserción múltiple:
usuarios = [
{'name': 'Ana', 'age': 25, 'profession': 'Diseñadora'},
{'name': 'Pedro', 'age': 40, 'profession': 'Programador'},
{'name': 'María', 'age': 28, 'profession': 'Gerente'}
]
doc_ids = db.insert_multiple(usuarios)
print(f"Documentos agregados: {len(doc_ids)}")
Lectura de datos
Obtener todos los documentos:
todos_usuarios = db.all()
print(f"Total de usuarios: {len(todos_usuarios)}")
Obtener un documento por ID:
usuario = db.get(doc_id=1)
if usuario:
print(f"Usuario encontrado: {usuario['name']}")
Búsqueda y filtrado
Fundamentos de búsqueda con Query:
from tinydb import Query
Usuario = Query()
# Búsqueda por coincidencia exacta
usuarios = db.search(Usuario.name == 'Juan')
# Búsqueda por condición
adultos = db.search(Usuario.age >= 30)
# Obtener la primera coincidencia
usuario = db.get(Usuario.name == 'Ana')
Condiciones de búsqueda complejas:
# Operador lógico Y
disenadores_jovenes = db.se