Intermédiaire50 min30 XP
Objectifs de cette leçon
- Installer et configurer Prisma
- Définir un schéma de base de données
- Effectuer des requêtes CRUD avec Prisma
Bases de données avec Prisma 🗄️
Introduction à Prisma
Prisma est un ORM (Object-Relational Mapping) moderne pour Node.js. Il facilite les interactions avec la base de données grâce à un schéma typé et des requêtes intuitives.
Installation
npm install prisma @prisma/client npx prisma init
Définir un schéma
// prisma/schema.prisma generator client { provider = "prisma-client-js" } datasource db { provider = "sqlite" url = "file:./dev.db" } model User { id String @id @default(cuid()) email String @unique name String? posts Post[] } model Post { id String @id @default(cuid()) title String content String? published Boolean @default(false) author User @relation(fields: [authorId], references: [id]) authorId String createdAt DateTime @default(now()) }
💡
String?signifie que le champ est optionnel.@default()définit une valeur par défaut.
Générer et utiliser le client
npx prisma migrate dev --name init # Crée la base de données
// src/db.js import { PrismaClient } from '@prisma/client'; export const prisma = new PrismaClient();
Opérations CRUD
import { prisma } from './db.js'; // CREATE — Créer un utilisateur const user = await prisma.user.create({ data: { email: 'alice@test.com', name: 'Alice' } }); // READ — Lire tous les utilisateurs const users = await prisma.user.findMany(); // READ — Lire avec filtre const alice = await prisma.user.findUnique({ where: { email: 'alice@test.com' } }); // READ — Lire avec relations const userWithPosts = await prisma.user.findUnique({ where: { id: user.id }, include: { posts: true } }); // UPDATE — Modifier un utilisateur const updated = await prisma.user.update({ where: { id: user.id }, data: { name: 'Alice Martin' } }); // DELETE — Supprimer un utilisateur await prisma.user.delete({ where: { id: user.id } });
Requêtes avancées
// Filtrer + trier + paginer const results = await prisma.post.findMany({ where: { published: true }, orderBy: { createdAt: 'desc' }, skip: 0, take: 10, include: { author: { select: { name: true } } } }); // Compter const count = await prisma.post.count({ where: { published: true } });
Relations
// Créer un utilisateur avec des posts const user = await prisma.user.create({ data: { email: 'bob@test.com', name: 'Bob', posts: { create: [ { title: 'Premier article', content: 'Contenu...' }, { title: 'Deuxième article' } ] } } });
Résumé
| Opération | Prisma |
|---|---|
| Créer | prisma.model.create() |
| Lire | prisma.model.findMany() |
| Trouver | prisma.model.findUnique() |
| Modifier | prisma.model.update() |
| Supprimer | prisma.model.delete() |
| Compter | prisma.model.count() |
| Filtrer | where: { ... } |
| Trier | orderBy: { ... } |
Exercices 🎯
- Crée un schéma avec
User,Post, etCommentavec les relations appropriées - Implémente des routes Express pour CRUD sur les posts
- Ajoute un endpoint qui retourne les posts avec leurs auteurs et commentaires
⚡ Simulateur — BDD avec Prisma
Étape 1/4📝 Pseudo-code
1const { PrismaClient } = require("@prisma/client");
2const prisma = new PrismaClient();
3const users = await prisma.user.findMany();
4console.log(users);
⚙️ Exécution
📦 Mémoire
Aucune variable
🔀 Flux d'exécution
require("@prisma/client")
3
Import de Prisma
@prisma/client est généré par Prisma après la définition du schéma dans schema.prisma. Il contient les types et le client.