Google Firestore es una base de datos NoSQL en la nube de Firebase, diseñada para almacenar documentos JSON. Es ideal para aplicaciones escalables y en tiempo real. Sin embargo, trabajar directamente con Firestore a través de google-cloud-firestore no siempre es cómodo, especialmente si estás acostumbrado a un enfoque orientado a objetos y código tipado.
FireO, el ORM para Google Firestore, es una librería de Python que simplifica el trabajo con Firestore al ofrecer una interfaz similar a los ORM más populares. Modelos, campos, validación, relaciones... todo esto ahora está disponible en el mundo de Firebase.
¿Qué es FireO y por qué deberías usarlo?
FireO (Firebase ORM) es un mapeo objeto-relacional para Google Firestore, escrito en Python. Esta librería permite a los desarrolladores trabajar con Firestore como si fuera una base de datos relacional tradicional, utilizando clases y objetos en lugar de consultas directas a la API.
Principales ventajas de FireO:
- Facilidad de uso: Sintaxis intuitiva, similar a Django ORM
- Tipado de campos: Tipado estricto con validación automática
- Validación de datos: Verificación integrada antes de guardar
- Soporte para relaciones: Trabajo con campos de referencia y estructuras anidadas
- Gestión automática de metadatos: Creación automática de marcas de tiempo
- Migraciones: Gestión simplificada de la estructura de datos
Instalación y configuración de FireO
Instalación de la librería
pip install fireo
Configuración de autenticación
Para trabajar con Firestore, debes configurar la autenticación mediante una cuenta de servicio:
- Crea una cuenta de servicio en Firebase Console
- Descarga la clave JSON
- Indica la ruta de la clave en una variable de entorno:
export GOOGLE_APPLICATION_CREDENTIALS="ruta/a/tu-clave.json"
Configuración alternativa de conexión
from fireo import connection
# Conexión mediante archivo
connection(from_file="ruta/al/serviceAccountKey.json")
# Conexión mediante variable de entorno
connection()
Fundamentos de Firestore y el modelo orientado a documentos
Estructura de datos en Firestore
Firestore almacena datos en la siguiente jerarquía:
- Base de datos → Colecciones → Documentos → Campos
- Los documentos pueden contener subcolecciones
- Los campos pueden ser de varios tipos: cadenas, números, arrays, objetos, etc.
Particularidades del enfoque NoSQL
Firestore es una base de datos sin esquema, lo que significa:
- Los documentos de una misma colección pueden tener campos diferentes
- No es necesario definir la estructura de antemano
- Flexibilidad para modificar la estructura de los datos
FireO añade una capa de estructura y validación sobre esta flexibilidad.
Creación de modelos en FireO
Modelo básico
from fireo.models import Model
from fireo.fields import TextField, NumberField, BooleanField
class Usuario(Model):
nombre = TextField(required=True, max_length=100)
edad = NumberField(required=True)
activo = BooleanField(default=True)
class Meta:
collection_name = "usuarios" # Opcional, por defecto usa el nombre de la clase
Modelo avanzado con validación
from fireo.fields import EmailField, DateTimeField, ListField
from datetime import datetime
class Perfil(Model):
usuario_id = TextField(required=True)
email = EmailField(required=True)
creado_en = DateTimeField(default=datetime.now)
etiquetas = ListField También en la biblioteca
Caché en Swift (iOS/macOS): Redis, NSCache y otras soluciones
Envío de SMS en Go (Golang): integración con API de biblioteca
frozen para C++: guía completa con ejemplos prácticos
Procesamiento y edición de imágenes en TypeScript: Jimp, Sharp, Canvas
vcpkg para C++: guía completa con ejemplos prácticos