Google Firestore est une base de données NoSQL cloud de Firebase, conçue pour stocker des documents JSON. Elle est idéale pour les applications évolutives et en temps réel. Cependant, travailler directement avec Firestore via google-cloud-firestore n'est pas toujours pratique, surtout si vous êtes habitué à une approche orientée objet et à un code typé.
FireO – l'ORM pour Google Firestore – est une bibliothèque Python qui simplifie l'utilisation de Firestore en offrant une interface similaire aux ORM populaires. Modèles, champs, validation, relations : tout cela est désormais accessible dans l'univers Firebase.
Qu'est-ce que FireO et pourquoi l'utiliser ?
FireO (Firebase ORM) est un mapping objet-relationnel pour Google Firestore, écrit en Python. Cette bibliothèque permet aux développeurs de travailler avec Firestore comme avec une base de données relationnelle traditionnelle, en utilisant des classes et des objets plutôt que des requêtes API directes.
Principaux avantages de FireO :
- Simplicité d'utilisation : Syntaxe intuitive, similaire à Django ORM
- Typage des champs : Typage strict avec validation automatique
- Validation des données : Vérification intégrée avant sauvegarde
- Support des relations : Gestion des champs de référence et des structures imbriquées
- Gestion automatique des métadonnées : Création automatique d'horodatages
- Migrations : Gestion simplifiée de la structure des données
Installation et configuration de FireO
Installation de la bibliothèque
pip install fireo
Configuration de l'authentification
Pour utiliser Firestore, vous devez configurer l'authentification via un Service Account :
- Créez un Service Account dans la console Firebase
- Téléchargez la clé JSON
- Indiquez le chemin vers la clé dans une variable d'environnement :
export GOOGLE_APPLICATION_CREDENTIALS="chemin/vers/votre-cle.json"
Configuration alternative de la connexion
from fireo import connection
# Connexion via fichier
connection(from_file="chemin/vers/serviceAccountKey.json")
# Connexion via variable d'environnement
connection()
Fondamentaux de Firestore et du modèle orienté document
Structure des données dans Firestore
Firestore stocke les données selon la hiérarchie suivante :
- Base de données → Collections → Documents → Champs
- Documents peuvent contenir des sous-collections
- Champs peuvent être de différents types : chaînes, nombres, tableaux, objets, etc.
Particularités de l'approche NoSQL
Firestore est une base de données sans schéma, ce qui signifie :
- Les documents d'une même collection peuvent avoir des champs différents
- Pas besoin de définir la structure à l'avance
- Flexibilité pour modifier la structure des données
FireO ajoute une couche de structure et de validation par-dessus cette flexibilité.
Création de modèles dans FireO
Modèle de base
from fireo.models import Model
from fireo.fields import TextField, NumberField, BooleanField
class User(Model):
name = TextField(required=True, max_length=100)
age = NumberField(required=True)
is_active = BooleanField(default=True)
class Meta:
collection_name = "users" # Optionnel, par défaut le nom de la classe est utilisé
Modèle avancé avec validation
from fireo.fields import EmailField, DateTimeField, ListField
from datetime import datetime
class Profile(Model):
user_id = TextField(required=True)
email = EmailField(required=True)
created_at = DateTimeField(default=datetime.now)
tags = ListFiel