Prisma ORM
Un ORM (Object-Relational Mapping) es una técnica que permite interactuar con bases de datos usando código orientado a objetos en lugar de SQL crudo. Básicamente, convierte tablas en clases, filas en objetos y columnas en atributos. Prisma es un ORM moderno para Node.js que facilita la manipulación de bases de datos
¿Para qué sirve? Sirve para simplificar las operaciones de lectura/escritura sobre bases de datos, reducir errores de tipeo en queries SQL y mantener un código más limpio y mantenible.
¿Por qué conocer esto mejora tus habilidades como desarrollador? Porque trabajar directo con SQL puede volverse un quilombo en proyectos grandes. Un ORM como Prisma te da estructura, validaciones y autocompletado, ahorrando tiempo y previniendo bugs. Además, es un estándar en muchas empresas.
Analogía Un ORM es como un traductor entre vos (el programador) y la base de datos. Vos hablás JavaScript, la base habla SQL. Prisma se encarga de traducir con buena onda y sin errores de interpretación.
¿Cómo funciona Prisma?
-
Se escribe el esquema de la DB en schema.prisma.
-
Prisma genera un cliente.
-
Usás ese cliente para hacer consultas en tu código.
Instalación
Para instalar la dependencia de Prisma en tu proyecto, ejecutemos el siguiente comando:
npm install prisma @prisma/client
npm install -D prisma
Luego, para poder crear los archivos de prisma en tu proyecto, ejecutemos el siguiente comando:
npx prisma init
Configuración de Prisma
Tras ejecutar el comando anterior, se crea un archivo ./prisma/schema.prisma
que contiene el esquema de la base de datos.
Lo primero que debemos hacer es configurar la base de datos en el archivo. Para ello revisaremos las siguientes lineas de código
datasource db {
provider = "mysql" // Cambiar a "mysql"
url = env("DATABASE_URL")
}
Como se puede observar, se utiliza la variable de entorno DATABASE_URL
para establecer la conexión con la base de datos. En el archivo .env
debemos configurar la variable de entorno DATABASE_URL
con la cadena de conexión de la base de datos.
DATABASE_URL = mysql://USER:PASSWORD@HOST:PORT/DATABASE # Reemplazar los valores por su config de DB
Prisma Migrate
Pueden crear un modelo (representación de una tabla) agregando al archivo ./prisma/schema.prisma
:
model Tarea {
id String @id @default(uuid())
titulo String
descripcion String
path String @unique
}
Luego, podemos ejecutar el comando npx prisma migrate dev
para crear la tabla en la base de datos en base al modelo.
Prisma Client
Una vez configurado el archivo ./prisma/schema.prisma
, debemos crear el cliente de Prisma. Para ello, ejecutemos el siguiente comando:
npx prisma generate
Para poder usar el cliente de forma eficiente, podríamos crear un archivo lib/prisma.js
que contenga el cliente de Prisma de forma que sea facil de exportar y no tengamos que andar configurandolo cada vez que lo vayamos a llamar
// lib/prisma.js
import { PrismaClient } from "../generated/prisma/client.js";
const prisma = new PrismaClient();
export default prisma;
Usando Prisma Client
En las rutas de nuestro servidor, podemos usar el cliente de Prisma para interactuar con la base de datos.
// routes/tareas.routes.js
import { Router } from "express";
import prisma from "../lib/prisma.js";
const router = Router();
router.get("/", async (req, res) => {
const tareas = await prisma.tarea.findMany();
res.json(tareas);
});
router.post("/", async (req, res) => {
const { titulo, descripcion, path } = req.body;
const tarea = await prisma.tarea.create({
data: {
titulo,
descripcion,
path,
},
});
res.json(tarea);
})
// ...
export default router;