Prisma para TypeScript: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción a Prisma: ORM moderno para TypeScript

\n\n

Prisma es un ORM (Object-Relational Mapping) moderno para TypeScript y Node.js que cambia radicalmente el enfoque de trabajo con bases de datos. A diferencia de los ORM tradicionales como Sequelize o TypeORM, Prisma ofrece un modelo de datos declarativo, generación automática de tipos y una API intuitiva. La biblioteca es compatible con PostgreSQL, MySQL, SQLite, SQL Server, MongoDB y CockroachDB.

\n\n

El objetivo principal de Prisma es hacer que el trabajo con bases de datos sea seguro, eficiente y conveniente. Gracias a la integración con TypeScript, obtienes autocompletado y verificación de tipos en tiempo de compilación, lo que reduce significativamente la cantidad de errores en tiempo de ejecución. Prisma consta de tres componentes clave:

\n\n
    \n
  • Prisma Client — cliente generado automáticamente para trabajar con la BD
  • \n
  • Prisma Migrate — sistema de gestión de migraciones
  • \n
  • Prisma Studio — interfaz gráfica para ver y editar datos
  • \n
\n\n

Instalación de Prisma

\n\n

La instalación de Prisma en un proyecto TypeScript se realiza mediante npm. Para empezar, crea un nuevo proyecto:

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

Instala Prisma CLI y Prisma Client:

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

Inicializa Prisma en el proyecto:

\n\n
npx prisma init
\n\n

Este comando creará el directorio prisma con el archivo schema.prisma y el archivo .env para las variables de entorno.

\n\n

Inicio rápido: ejemplo de código

\n\n

Consideremos la creación de una aplicación simple para gestionar usuarios. Primero, definimos el modelo en 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

Ejecuta la migración para crear las tablas en SQLite:

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

Ahora crea el archivo index.ts con un ejemplo de uso:

\n\n
import { PrismaClient } from '@prisma/client'\n\nconst prisma = new PrismaClient()\n\nasync function main() {\n  // Creación de usuario\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('Created user:', user)\n\n  // Obtener todos los usuarios con sus publicaciones\n  const users = await prisma.user.findMany({\n    include: { posts: true }\n  })\n  console.log('All users:', JSON.stringify(users, null, 2))\n}\n\nmain()\n  .catch(e => console.error(e))\n  .finally(async () => await prisma.$disconnect())
\n\n

Ejecuta el código:

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

Métodos principales de Prisma Client

\n\n

1. findUnique

\n

Qué hace: Encuentra un único registro por un identificador único (id, email, etc.).

\n

Parámetros:

\n
    \n
  • where — objeto con condiciones de búsqueda (obligatorio)
  • \n
  • include — (opcional) para incluir modelos relacionados
  • \n
  • select — (opcional) para seleccionar campos específicos
  • \n
\n

Ejemplo:

\n
const user = await prisma.user.findUni                    

Recommendations