Inicio > Cursos > Node.js y Express > Prisma ORM
Node.js y ExpressBases de Datos y APIsLección 11 de 20

Prisma ORM

Prisma es el ORM más moderno para Node.js. Te da un cliente type-safe generado desde tu schema, migraciones automáticas y una API fluida. Soporta PostgreSQL, MySQL, SQLite, MongoDB y más. El schema.prisma es la única fuente de verdad de tu base de datos.

// 1. npx prisma init (crea schema.prisma + .env)
// 2. Editar schema.prisma:
//
// generator client {
//   provider = "prisma-client-js"
// }
//
// datasource db {
//   provider = "postgresql"
//   url      = env("DATABASE_URL")
// }
//
// model Usuario {
//   id        Int       @id @default(autoincrement())
//   email     String    @unique
//   nombre    String
//   rol       Rol       @default(USUARIO)
//   tareas    Tarea[]
//   creadoEn  DateTime  @default(now())
// }
//
// model Tarea {
//   id         Int      @id @default(autoincrement())
//   titulo     String
//   completada Boolean  @default(false)
//   usuario    Usuario  @relation(fields: [usuarioId], references: [id])
//   usuarioId  Int
// }
//
// enum Rol { ADMIN USUARIO MODERADOR }

// 3. npx prisma migrate dev --name init
// 4. npx prisma generate

const { PrismaClient } = require('@prisma/client');
const db = new PrismaClient();

// CRUD con Prisma
async function ejemplos() {
  // Crear
  const usuario = await db.usuario.create({
    data: { email: 'ana@test.com', nombre: 'Ana García' }
  });

  // Buscar uno (lanza si no existe)
  const encontrado = await db.usuario.findUnique({
    where: { email: 'ana@test.com' },
    include: { tareas: true } // JOIN con tareas
  });

  // Listar con filtros
  const usuarios = await db.usuario.findMany({
    where: { rol: 'USUARIO', nombre: { contains: 'Ana' } },
    orderBy: { creadoEn: 'desc' },
    skip: 0,
    take: 20,
  });

  // Actualizar
  const actualizado = await db.usuario.update({
    where: { id: usuario.id },
    data: { nombre: 'Ana Martínez' }
  });

  // Upsert — crea si no existe, actualiza si existe
  const upserted = await db.usuario.upsert({
    where: { email: 'bot@test.com' },
    create: { email: 'bot@test.com', nombre: 'Bot' },
    update: { nombre: 'Bot v2' }
  });

  // Eliminar
  await db.usuario.delete({ where: { id: usuario.id } });
}

export default db;
ConsejoExporta una única instancia de PrismaClient como singleton. Crear múltiples instancias agota el pool de conexiones. En desarrollo, usa una variable global para evitar hot-reload cree nuevas instancias.
← Validación con ZodMongoose y MongoDB →

Practica esta lección

Resuelve los ejercicios del curso de Node.js y Express en la app, gratis y con corrección automática.

Empezar a practicar