Prisma ORM

VérifiéSûr

ORM type-safe pour PostgreSQL avec génération de types automatique, modélisation déclarative et gestion des migrations. Alternative sécurisée aux requêtes SQL brutes.

Spar Skills Guide Bot
DeveloppementIntermédiaire
3002/06/2026
Claude CodeCursorWindsurf
#prisma#orm#postgresql#type-safe#database-migrations

Recommandé pour

Notre avis

Ce skill permet d'utiliser Prisma ORM pour des opérations de base de données type-safe avec PostgreSQL, en remplacement du SQL brut.

Points forts

  • Génération automatique de types TypeScript pour les requêtes
  • Modélisation déclarative des schémas avec migrations intégrées
  • Élimination des risques d'injection SQL et du mapping manuel des lignes

Limites

  • Nécessite une phase d'apprentissage pour les concepts propres à Prisma (relations, mapping)
  • Peut être moins adapté pour des requêtes SQL très complexes ou spécifiques à certaines bases de données
  • Migrations parfois difficiles à déboguer en cas de conflit
Quand l'utiliser

Utilisez ce skill quand vous travaillez avec PostgreSQL et souhaitez une couche d'abstraction sûre et productive par rapport au SQL brut.

Quand l'éviter

Évitez ce skill si votre projet utilise déjà un ORM comme Sequelize ou Drizzle, ou si les performances brutes des requêtes SQL sont critiques sans abstraction intermédiaire.

Analyse de sécurité

Sûr
Score qualité85/100

The skill provides standard Prisma ORM setup instructions using npm and npx commands; no destructive operations, file deletion, data exfiltration, or obfuscated payloads.

Aucun point d'attention détecté

Exemples

Define Prisma schema with PostgreSQL mappings
Create a Prisma schema for a 'Product' model with fields like id, name, price (Decimal), createdAt, and a relation to a 'ProductTranslation' model. Use @map and @@map for snake_case mappings.
Write type-safe query with translation fallback
Using Prisma, fetch a product by id with its translations filtered by language code, and fallback to the base name if no translation exists.
Initialize Prisma in an existing project
I want to replace raw SQL with Prisma in my Express backend. Show me the steps to install Prisma, run init, define a schema for my products table, and generate the client.

name: prisma description: | Prisma ORM for type-safe database operations with PostgreSQL. Use when: Defining schemas, writing type-safe queries, creating migrations, modeling relations, or replacing raw SQL with ORM patterns. allowed-tools: Read, Edit, Write, Glob, Grep, Bash

Prisma Skill

Provides type-safe database operations as an alternative to raw SQL. This codebase currently uses the pg library with raw SQL queries. Prisma offers automatic type generation, declarative schema modeling, and migration management - eliminating the manual row mapping and SQL injection risks present in raw SQL approaches.

Quick Start

Install and Initialize

cd backend
npm install prisma @prisma/client
npx prisma init

Schema Definition

// prisma/schema.prisma
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model Product {
  id               Int                    @id @default(autoincrement())
  name             String
  shortDescription String                 @map("short_description")
  description      String
  price            Decimal                @db.Decimal(10, 2)
  salePrice        Decimal?               @map("sale_price") @db.Decimal(10, 2)
  imageUrl         String                 @map("image_url")
  inventory        Int                    @default(0)
  categories       Json
  highlights       Json?
  usage            String?
  isNew            Boolean                @default(false) @map("is_new")
  isFeatured       Boolean                @default(false) @map("is_featured")
  salesCount       Int                    @default(0) @map("sales_count")
  createdAt        DateTime               @default(now()) @map("created_at")
  updatedAt        DateTime               @updatedAt @map("updated_at")
  translations     ProductTranslation[]
  orderItems       OrderItem[]
  variants         ProductVariant[]

  @@map("products")
}

model ProductTranslation {
  id              Int      @id @default(autoincrement())
  productId       Int      @map("product_id")
  languageCode    String   @map("language_code") @db.VarChar(10)
  name            String   @db.VarChar(255)
  shortDescription String  @map("short_description")
  description     String
  highlights      Json?
  usage           String?
  slug            String?  @db.VarChar(255)
  createdAt       DateTime @default(now()) @map("created_at")
  updatedAt       DateTime @updatedAt @map("updated_at")
  product         Product  @relation(fields: [productId], references: [id], onDelete: Cascade)
  language        Language @relation(fields: [languageCode], references: [code], onDelete: Cascade)

  @@unique([productId, languageCode])
  @@map("product_translations")
}

Client Usage

// backend/src/db/prisma.ts
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient({
  log: process.env.NODE_ENV === 'development' ? ['query', 'warn', 'error'] : ['error'],
});

export { prisma };

Key Concepts

| Concept | Usage | Example | |---------|-------|---------| | @map | Map field to snake_case column | @map("created_at") | | @@map | Map model to table name | @@map("products") | | Relations | Define FK relationships | product Product @relation(...) | | @db.Decimal | Specify PostgreSQL types | @db.Decimal(10, 2) | | @@unique | Composite unique constraints | @@unique([productId, languageCode]) | | Transactions | Atomic operations | prisma.$transaction([...]) |

Common Patterns

Fetching with Translation Fallback

When: Getting localized content with English fallback

const product = await prisma.product.findUnique({
  where: { id: productId },
  include: {
    translations: {
      where: { languageCode: lang },
    },
  },
});

// Apply translation or fallback to base
const name = product.translations[0]?.name ?? product.name;

Transactions for Orders

When: Creating orders with inventory updates

await prisma.$transaction(async (tx) => {
  const order = await tx.order.create({ data: orderData });
  
  for (const item of items) {
    await tx.orderItem.create({
      data: { orderId: order.id, ...item },
    });
    await tx.product.update({
      where: { id: item.productId },
      data: { inventory: { decrement: item.quantity } },
    });
  }
  
  return order;
});

See Also

  • patterns - Query patterns and model design
  • workflows - Migrations and schema management

Related Skills

  • See the postgresql skill for raw SQL patterns and PostgreSQL-specific features
  • See the typescript skill for type inference patterns with Prisma
  • See the zod skill for runtime validation of Prisma inputs
Skills similaires