Migraciones de bases de datos en Node.js: Sequelize, Knex y TypeORM

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

Migraciones de bases de datos en JavaScript (Node.js): revisión completa de herramientas



Las migraciones de bases de datos son una forma de realizar cambios controlados y versionados en el esquema de la base de datos. En el mundo de Node.js, existen varias bibliotecas potentes que permiten automatizar este proceso. En este artículo, revisaremos las tres herramientas más populares: Sequelize, Knex.js y TypeORM.



¿Qué son las migraciones y por qué son necesarias?

Las migraciones resuelven el problema de sincronizar la estructura de la base de datos entre desarrolladores y entornos (dev, staging, production). En lugar de ejecutar scripts SQL manualmente, describes los cambios en código JavaScript/TypeScript. Ventajas:

  • Aplicación automática de cambios
  • Posibilidad de reversión (rollback) a una versión anterior
  • Almacenamiento del historial de cambios en el repositorio
  • Soporte para diferentes SGBD (PostgreSQL, MySQL, SQLite, etc.)


1. Sequelize — ORM con sistema de migraciones integrado

Sequelize es uno de los ORM más populares para Node.js. Proporciona una herramienta CLI para gestionar migraciones. Instalación:

npm install --save sequelizenpm install --save-dev sequelize-clinpx sequelize-cli init

Después de la inicialización, se crean las carpetas migrations, models, seeders y el archivo de configuración config/config.json.



Creación de una migración

npx sequelize-cli migration:generate --name create-users-table

Ejemplo del contenido de la migración:

'use strict';module.exports = {  up: async (queryInterface, Sequelize) => {    await queryInterface.createTable('Users', {      id: {        type: Sequelize.INTEGER,        primaryKey: true,        autoIncrement: true      },      username: {        type: Sequelize.STRING,        allowNull: false,        unique: true      },      email: {        type: Sequelize.STRING,        allowNull: false      },      createdAt: {        type: Sequelize.DATE,        allowNull: false      },      updatedAt: {        type: Sequelize.DATE,        allowNull: false      }    });  },  down: async (queryInterface, Sequelize) => {    await queryInterface.dropTable('Users');  }};


Aplicación y reversión

npx sequelize-cli db:migratenpx sequelize-cli db:migrate:undo


2. Knex.js — Constructor de consultas SQL con migraciones

Knex.js no es un ORM, sino un potente constructor de consultas. Su sistema de migraciones se considera uno de los más flexibles. Instalación:

npm install knex --savenpm install pg --save  # o mysql, sqlite3npx knex init


Creación y escritura de una migración

npx knex migrate:make create_posts_table

Ejemplo de código:

exports.up = function(knex) {  return knex.schema.createTable('posts', (table) => {    table.increments('id').primary();    table.string('title', 255).notNullable();    table.text('content');    table.integer('user_id').unsigned().references('id').inTable('users');    table.timestamps(true, true);  });};

exports.down = function(knex) { return knex.schema.dropTableIfExists('posts');};


Comandos para trabajar

npx knex migrate:latestnpx knex migrate:rollbacknpx knex migrate:status  # ver estado

Knex también admite «semillas» (seeds) para la carga inicial de datos:

npx knex seed:make 01_demo_usersnpx knex seed:run


3. TypeORM — migraciones para proyectos TypeScript

TypeORM es un ORM moderno que soporta tanto JavaScript como TypeScript. Su sistema de migraciones está estrechamente integrado con los decoradores de entidades. Instalación:

npm install typeorm reflect-metadata --savenpm in                    

Recommendations