Prisma pour TypeScript : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction à Prisma : un ORM moderne pour TypeScript

\n\n

Prisma est un ORM (Object-Relational Mapping) moderne pour TypeScript et Node.js, qui change radicalement l'approche du travail avec les bases de données. Contrairement aux ORM traditionnels comme Sequelize ou TypeORM, Prisma propose un modèle de données déclaratif, une génération automatique de types et une API intuitive. La bibliothèque prend en charge PostgreSQL, MySQL, SQLite, SQL Server, MongoDB et CockroachDB.

\n\n

L'objectif principal de Prisma est de rendre le travail avec les bases de données sûr, performant et pratique. Grâce à l'intégration avec TypeScript, vous bénéficiez de l'autocomplétion et de la vérification des types au moment de la compilation, ce qui réduit considérablement le nombre d'erreurs d'exécution. Prisma se compose de trois composants clés :

\n\n
    \n
  • Prisma Client — un client généré automatiquement pour travailler avec la base de données
  • \n
  • Prisma Migrate — un système de gestion des migrations
  • \n
  • Prisma Studio — une interface graphique pour visualiser et modifier les données
  • \n
\n\n

Installation de Prisma

\n\n

L'installation de Prisma dans un projet TypeScript se fait via npm. Pour commencer, créez un nouveau projet :

\n\n
mkdir my-prisma-project\ncd my-prisma-project\nnpm init -y
\n\n

Installez Prisma CLI et Prisma Client :

\n\n
npm install prisma @prisma/client --save
\n\n

Initialisez Prisma dans le projet :

\n\n
npx prisma init
\n\n

Cette commande crée le répertoire prisma avec le fichier schema.prisma et le fichier .env pour les variables d'environnement.

\n\n

Démarrage rapide : exemple de code

\n\n

Considérons la création d'une application simple pour gérer les utilisateurs. Commençons par définir le modèle dans prisma/schema.prisma :

\n\n
generator client {\n  provider = "prisma-client-js"\n}\n\ndatasource db {\n  provider = "sqlite"\n  url      = env("DATABASE_URL")\n}\n\nmodel User {\n  id        Int      @id @default(autoincrement())\n  email     String   @unique\n  name      String?\n  posts     Post[]\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n}\n\nmodel Post {\n  id        Int      @id @default(autoincrement())\n  title     String\n  content   String?\n  published Boolean  @default(false)\n  author    User     @relation(fields: [authorId], references: [id])\n  authorId  Int\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n}
\n\n

Exécutez la migration pour créer les tables dans SQLite :

\n\n
npx prisma migrate dev --name init
\n\n

Créez maintenant un fichier index.ts avec un exemple d'utilisation :

\n\n
import { PrismaClient } from '@prisma/client'\n\nconst prisma = new PrismaClient()\n\nasync function main() {\n  // Création d'un utilisateur\n  const user = await prisma.user.create({\n    data: {\n      email: 'alice@example.com',\n      name: 'Alice',\n      posts: {\n        create: { title: 'Hello World' }\n      }\n    }\n  })\n  console.log('Utilisateur créé :', user)\n\n  // Récupération de tous les utilisateurs avec leurs articles\n  const users = await prisma.user.findMany({\n    include: { posts: true }\n  })\n  console.log('Tous les utilisateurs :', JSON.stringify(users, null, 2))\n}\n\nmain()\n  .catch(e => console.error(e))\n  .finally(async () => await prisma.$disconnect())
\n\n

Exécutez le code :

\n\n
npx ts-node index.ts
\n\n

Méthodes principales de Prisma Client

\n\n

1. findUnique

\n

Ce qu'il fait : Trouve un enregistrement unique par identifiant unique (id, email, etc.).

\n

Paramètres :

\n
    \n
  • where — objet avec les conditions de recherche (obligatoire)
  • \n
  • include — (optionnel) pour inclure les modèles liés
  • \n
  • select — (optionnel) pour sélectionner des champs spécifiques
  • \n
\n

Exemple :

\n
const user = await prisma.user.findUni                    

Recommendations