Remplissage des tables
avec des données fictives générées avec Faker ou Mockaroo
Notions théoriques
Lorsqu’on développe une application utilisant une base de données relationnelle, il est essentiel de tester avec des données représentatives du monde réel.
Pour cela, il est possible d’utiliser des générateurs de données fictives, tels que :
- Faker (librairie dans plusieurs langages) https://faker.readthedocs.io/
- Mockaroo (outil en ligne) https://mockaroo.com/
Ces outils permettent de créer des jeux de données crédibles, structurés, et prêts à être insérés dans une base de données SQL.
Pourquoi générer des données fictives automatiquement ?
- Pour gagner du temps et éviter de saisir manuellement des dizaines de lignes.
- Pour simuler des cas réels avec des noms, emails, messages, dates, etc.
- Pour tester les performances et la robustesse du système.
- Pour respecter la vie privée en évitant d’utiliser des données personnelles.
Présentation de Faker
Faker est une librairie disponible en Python, JavaScript, PHP, etc.
Faker permet de générer :
- des noms, prénoms, emails réalistes,
- des UUID,
- des dates aléatoires,
- des phrases ou paragraphes.
Site : https://faker.readthedocs.io/
Exemple en Python :
from faker import Faker
fake = Faker()
print(fake.name()) # "Jean Dupont"
print(fake.email()) # "jean.dupont@example.com"
print(fake.uuid4()) # "b4e6c4c8-7afd-4e2e-8c1d-0c8b7f3e3c6d"
print(fake.text()) # "C’est un fait bien connu que..."
Il est possible de générer des centaines de lignes en quelques secondes avec une boucle.
Présentation de Mockaroo
Mockaroo est un site web permettant de générer des jeux de données et de les exporter en :
- CSV,
- SQL (INSERT),
- JSON,
- Excel.
Site : https://mockaroo.com
Fonctionnalités utiles :
- Personnalisation des champs (nom, email, UUID, date…),
- Choix du format de sortie (SQL, JSON, etc.),
- Génération de 1000 lignes gratuitement.
Exemple pratique
Il est possible de générer des données fictives avec Mockaroo, puis de les insérer dans Supabase via DBeaver.
Étape 1 : générer des données avec Mockaroo
Aller sur https://mockaroo.com et créer un jeu de données SQL pour la table profiles
:
- id → UUID
- username → Username
- avatar_url → Image URL
- created_at → Date
Exporter au format SQL (INSERT statements) pour PostgreSQL.
Exemple de résultat :
INSERT INTO profiles (id, username, avatar_url, created_at) VALUES
('c3d4a2b2-e8f3-4e4b-9a2d-2f3e4b5c6d7e', 'lucie59', 'https://randomuser.me/api/portraits/women/1.jpg', '2023-08-01'),
('f9a8b7c6-d5e4-4c3b-a2b1-1a2b3c4d5e6f', 'mathis_duval', 'https://randomuser.me/api/portraits/men/2.jpg', '2023-08-02');
Étape 2 : copier les requêtes dans DBeaver
- Ouvrir DBeaver.
- Se connecter à la base Supabase via la connexion enregistrée sous le nom
supabase_super-admin
. - Coller les requêtes SQL générées dans l’éditeur.
- Exécuter.
Étape 3 : générer des classes avec Faker (Python)
from faker import Faker
import uuid
fake = Faker()
for _ in range(5):
name = fake.catch_phrase()
description = fake.text(max_nb_chars=100)
print(f"INSERT INTO classes (id, name, description) VALUES ('{uuid.uuid4()}', '{name}', '{description}');")
Exemple de sortie :
INSERT INTO classes (id, name, description) VALUES ('e5c9a7b1-0f2d-4c3f-a9a7-1e2f3d4c5b6a', 'Système d’authentification sécurisé', 'Une solution moderne pour gérer les accès des utilisateurs.');
Étape 4 : générer des messages
for _ in range(10):
content = fake.sentence()
sender_id = fake.uuid4()
class_id = fake.uuid4()
print(f"INSERT INTO messages (content, sender_id, class_id) VALUES ('{content}', '{sender_id}', '{class_id}');")
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Objectif du TP
À la fin de ce TP, votre base de données Supabase devra contenir des données fictives réalistes dans les tables suivantes :
profiles
user_roles
classes
class_members
messages
Ces données doivent être cohérentes, complètes, et compatibles avec les contraintes définies dans les scripts SQL des séances précédentes.
Vous utiliserez pour cela :
- Mockaroo pour générer des jeux de données prêts à insérer
- Faker (Python) pour produire dynamiquement des INSERT SQL
- DBeaver pour insérer les données dans la base distante en tant que
super-admin
Étape 1 — Préparer les UUID des utilisateurs existants
Avant de générer des données, vous devez récupérer les UUID des 5 utilisateurs créés via Supabase Auth.
- Connectez-vous à https://app.supabase.com
- Accédez à votre projet > onglet Auth > Users
- Notez les UUID des 5 utilisateurs créés (un par rôle : guest, student, teacher, admin, super-admin)
Une solution
Vous devez être connecté pour voir le contenu.
Étape 2 — Générer des profils avec Mockaroo
- Allez sur https://mockaroo.com
- Configurez les champs suivants pour générer des profils :
Field Name | Type |
---|---|
id | UUID |
username | Username |
avatar_url | Image URL |
created_at | Date |
- Générez 5 profils (un par utilisateur existant)
- Remplacez les UUID générés par ceux des utilisateurs Supabase (étape 1)
- Exportez le résultat au format SQL (PostgreSQL)
Une solution
Vous devez être connecté pour voir le contenu.
Étape 3 — Attribuer les rôles dans la table user_roles
Utilisez un éditeur SQL (par exemple DBeaver) pour insérer les rôles 'guest', 'student', 'teacher', 'admin' et 'super-admin' correspondants aux utilisateurs.
Une solution
Vous devez être connecté pour voir le contenu.
Étape 4 — Insérer manuellement les classes officielles
Dans ce projet, chaque étudiant est inscrit dans une classe.
Vous allez maintenant insérer manuellement les classes suivantes dans la table classes
de votre base Supabase :
- BTS SIO1
- BTS SIO2
- BTS SAM1
- BTS SAM2
- BTS GPME1
- BTS GPME2
Instructions
- Ouvrez DBeaver et connectez-vous à votre base Supabase via la connexion
supabase_super-admin
. - Dans l’éditeur SQL, insérez les 6 classes manuellement à l’aide de requêtes
INSERT
. - Pour chaque classe, vous devez générer un UUID (via un script Python ou un générateur en ligne) et fournir une courte description.
Voici des exemples de UUID :
b1e2d3f4-1111-1111-1111-111111111111
b1e2d3f4-2222-2222-2222-222222222222
b1e2d3f4-3333-3333-3333-333333333333
b1e2d3f4-4444-4444-4444-444444444444
b1e2d3f4-5555-5555-5555-555555555555
b1e2d3f4-6666-6666-6666-666666666666
Voici des exemples de descriptions :
- BTS SIO1 : Classe de première année en Services Informatiques aux Organisations.
- BTS SIO2 : Classe de deuxième année en Services Informatiques aux Organisations.
- BTS SAM1 : Classe de première année en Support à l’Action Managériale.
- BTS SAM2 : Classe de deuxième année en Support à l’Action Managériale.
- BTS GPME1 : Classe de première année en Gestion de la PME.
- BTS GPME2 : Classe de deuxième année en Gestion de la PME.
Une solution
Vous devez être connecté pour voir le contenu.
Étape 5 — Inscrire des utilisateurs dans des classes
- Choisissez une ou deux classes créées à l’étape précédente
- Insérez des relations dans
class_members
pour les utilisateursstudent
etteacher
Une solution
Vous devez être connecté pour voir le contenu.
Étape 6 — Générer des messages avec Faker
- Ouvrez un éditeur Python local ou en ligne (comme Replit)
- Utilisez le script Python suivant pour générer des messages liés à une classe et un utilisateur
for _ in range(5):
content = fake.sentence()
sender_id = 'e7f3c4d5-...' # UUID du teacher
class_id = 'b1e2d3f4-...' # UUID de la classe
print(f"INSERT INTO messages (content, sender_id, class_id) VALUES ('{content}', '{sender_id}', '{class_id}');")
- Exécutez les requêtes dans DBeaver
Une solution
Vous devez être connecté pour voir le contenu.
Étape 7 — Vérification finale de la base
- Vérifiez que chaque table contient les données attendues :
SELECT * FROM profiles;
SELECT * FROM user_roles;
SELECT * FROM classes;
SELECT * FROM class_members;
SELECT * FROM messages;
- Vérifiez que les UUID correspondent bien aux utilisateurs créés dans Supabase Auth
Une solution
Vous devez être connecté pour voir le contenu.
Étape 8 — Export des données pour la BD locale
Dans Supabase, allez dans Database > Backups ou utilisez pg_dump
pour exporter la structure + données
Une solution
Vous devez être connecté pour voir le contenu.