Introducción a Prisma: ORM moderno para TypeScript
\n\nPrisma 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\nEl 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
Instalación de Prisma
\n\nLa instalación de Prisma en un proyecto TypeScript se realiza mediante npm. Para empezar, crea un nuevo proyecto:
\n\nmkdir my-prisma-project\ncd my-prisma-project\nnpm init -y\n\nInstala Prisma CLI y Prisma Client:
\n\nnpm install prisma @prisma/client --save\n\nInicializa Prisma en el proyecto:
\n\nnpx prisma init\n\nEste comando creará el directorio prisma con el archivo schema.prisma y el archivo .env para las variables de entorno.
Inicio rápido: ejemplo de código
\n\nConsideremos la creación de una aplicación simple para gestionar usuarios. Primero, definimos el modelo en prisma/schema.prisma:
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\nEjecuta la migración para crear las tablas en SQLite:
\n\nnpx prisma migrate dev --name init\n\nAhora crea el archivo index.ts con un ejemplo de uso:
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\nEjecuta el código:
\n\nnpx ts-node index.ts\n\nMétodos principales de Prisma Client
\n\n1. findUnique
\nQué hace: Encuentra un único registro por un identificador único (id, email, etc.).
\nPará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
Ejemplo:
\nconst user = await prisma.user.findUni