ORM para JavaScript (Node.js): comparación de Sequelize, TypeORM, Prisma

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

ORM para JavaScript (Node.js): comparación y ejemplos



Al desarrollar la parte del servidor en Node.js, tarde o temprano surge la cuestión de la interacción con la base de datos. Escribir consultas SQL puras es una tarea laboriosa y propensa a errores. Aquí es donde ayudan los ORM (Object-Relational Mapping) — bibliotecas que permiten trabajar con las tablas de la base de datos como si fueran objetos comunes de JavaScript. En este artículo compararemos los tres ORM más populares para Node.js: Sequelize, TypeORM y Prisma, y proporcionaremos ejemplos de código ilustrativos.



1. Sequelize

Sequelize es uno de los ORM más antiguos y maduros para Node.js. Soporta PostgreSQL, MySQL, MariaDB, SQLite y Microsoft SQL Server. Sequelize utiliza un enfoque clásico con modelos y promesas (o async/await).



Instalación

npm install sequelize pg pg-hstore


Ejemplo: definición de modelo y consulta

const { Sequelize, DataTypes } = require('sequelize');const sequelize = new Sequelize('database', 'user', 'password', {  host: 'localhost',  dialect: 'postgres'});

const User = sequelize.define('User', { name: { type: DataTypes.STRING, allowNull: false }, email: { type: DataTypes.STRING, unique: true }});

async function createUser() { await sequelize.sync(); const user = await User.create({ name: 'Iván', email: 'ivan@example.com' }); console.log(user.toJSON());}createUser();


Características de Sequelize

  • Madurez y una gran comunidad.
  • Soporte para transacciones, migraciones y datos semilla.
  • Sistema flexible de asociaciones (hasOne, hasMany, belongsToMany).
  • Desventaja: sintaxis en ocasiones verbosa y depuración compleja.


2. TypeORM

TypeORM es un ORM que puede funcionar tanto con JavaScript como con TypeScript. Soporta los mismos SGBD que Sequelize y ofrece dos enfoques: Active Record y Data Mapper. TypeORM también utiliza activamente decoradores, lo que hace que el código sea más declarativo.



Instalación

npm install typeorm reflect-metadata pg


Ejemplo: modelo con decorador y consulta

import { Entity, PrimaryGeneratedColumn, Column, createConnection } from 'typeorm';

@Entity()class User { @PrimaryGeneratedColumn() id: number;

@Column() name: string;

@Column({ unique: true }) email: string;}

async function createUser() { const connection = await createConnection({ type: 'postgres', host: 'localhost', database: 'test', entities: [User], synchronize: true }); const user = new User(); user.name = 'María'; user.email = 'maria@example.com'; await connection.manager.save(user); console.log(user);}createUser();


Características de TypeORM

  • Excelente integración con TypeScript y decoradores.
  • Flexibilidad: elección entre Active Record y Data Mapper.
  • Soporte para migraciones, suscriptores de eventos y registro.
  • Desventaja: documentación a veces incompleta, cambios disruptivos frecuentes.


3. Prisma

Prisma es un ORM moderno que difiere radicalmente de sus predecesores. En lugar de modelos en el código, describes el esquema de datos en un archivo especial schema.prisma, y Prisma genera un cliente con seguridad de tipos. Esto proporciona autocompletado en el IDE y minimiza los errores.



Instalación

npm install @prisma/clientnpx prisma init


Ejemplo: esquema y consulta

schema.prisma:

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

model User { id Int @id @default(autoincrement()) name String email String @unique}


Código JavaScript:

const { PrismaClie                    

Recommendations