Cómo crear seeders en Node.js usando Sequelize: guía paso a paso

Si estás trabajando con una base de datos existente y necesitas agregar datos de prueba o pre-cargados, los seeders pueden ser una excelente herramienta para automatizar el proceso. En este artículo, te mostraremos cómo crear seeders en Node.js usando Sequelize.

Tiempo necesario: 30 minutos

Pasos a realizar para crear un seeder en Node usando Sequelize

  1. Genera los archivos del seeder

    Para generar los archivos del seeder, ejecuta el siguiente comando en la terminal:
    npx sequelize-cli seed:generate --name nombre_tabla --seeders-path seeders/nombre_bd/nombre_tabla

    Este comando generará dos archivos en la carpeta especificada: uno para hacer la migración y otro para deshacerla.

  2. Edita el archivo generado

    Abre el archivo del seeder generado y edita la función up para insertar los datos que deseas agregar a la tabla. También puedes editar la función down para revertir la inserción de datos en caso de que sea necesario.
    Recuerda que Sequelize es compatible con varios tipos de base de datos, por lo que es importante tener en cuenta las diferencias en la sintaxis de los comandos SQL según la base de datos que estés utilizando.

  3. Agrega las líneas necesarias en package.json

    Para poder ejecutar los comandos de migración y deshacer migración para el seeder, debes agregar las siguientes líneas en el archivo package.json:
    "sequelize:nombre_bd:nombre_tabla:seed:nombre_seeder": "sequelize --options-path ./.sequelize-nombre_bd-nombre_tabla.js --env nombre_bd db:seed --seed nombre_seeder-nombre_tabla.js", "sequelize:nombre_bd:nombre_tabla:seed:undo:nombre_seeder": "sequelize --options-path ./.sequelize-nombre_bd-nombre_tabla.js --env nombre_bd db:seed:undo --seed nombre_seeder-nombre_tabla.js"
    Recuerda reemplazar nombre_bd, nombre_tabla y nombre_seeder con los valores correspondientes a tu base de datos, tabla y seeder.

  4. Ejecuta el comando de migración.

    Para hacer la migración, ejecuta el siguiente comando en la terminal:
    npm run sequelize:nombre_bd:nombre_tabla:seed:nombre_seeder

  5. Ejecuta el comando de deshacer migración

    Para deshacer la migración, ejecuta el siguiente comando en la terminal:
    npm run sequelize:nombre_bd:nombre_tabla:seed:undo:nombre_seeder

Ejemplo archivo seeder generado

'use strict';

module.exports = {
  async up (queryInterface, Sequelize) {
    const Op = Sequelize.Op
    queryInterface.bulkDelete('nombre_tabla', {
        Campo2: {
          [Op.between]: [27, 28]
        },
    }, {})
  },

  async down (queryInterface, Sequelize) {
    await queryInterface.bulkInsert('nombre_tabla', [
      {
        Campo1: 'Pepe',
        Campo2: 27,
        createdAt: new Date(),
        updatedAt: new Date()
      },
      {
        Campo1: 'Maria',
        Campo2: 28,
        createdAt: new Date(),
        updatedAt: new Date()
      },
      
    ], {});
  }
};

Este seeder tiene dos funciones, up y down, que se utilizan para insertar y eliminar registros en la tabla nombre_tabla.

En la función up, se utiliza queryInterface.bulkDelete para eliminar todos los registros de la tabla que cumplan la condición especificada en el segundo parámetro. En este caso, se están eliminando los registros que tengan un valor en el campo Campo2 entre 27 y 28 (ambos inclusive).

En la función down, se utiliza queryInterface.bulkInsert para insertar nuevos registros en la tabla nombre_tabla. Se están insertando dos registros en este caso, cada uno con un valor en Campo1 y Campo2 específicos, así como también se establecen valores para los campos createdAt y updatedAt.

Conclusión

Los seeders son una excelente herramienta para agregar datos pre-cargados o de prueba a una base de datos. Con Sequelize y Node.js, puedes automatizar el proceso de inserción de datos en tu aplicación de manera sencilla y eficiente.

2 comentarios

  1. Hola, me sirvio tu ejemplo del caso, solo como dato, y es algo que veo, es que tienes la migracion al revez, por lo generarl el up es para insertar y el down es para eliminar, entonces quedaria asi:

    /////////////////////////////////////
    ‘use strict’;

    module.exports = {
    async up (queryInterface, Sequelize) {
    await queryInterface.bulkInsert(‘nombre_tabla’, [
    {
    Campo1: ‘Pepe’,
    Campo2: 27,
    createdAt: new Date(),
    updatedAt: new Date()
    },
    {
    Campo1: ‘Maria’,
    Campo2: 28,
    createdAt: new Date(),
    updatedAt: new Date()
    },

    ], {});
    }
    },

    async down (queryInterface, Sequelize) {
    const Op = Sequelize.Op
    queryInterface.bulkDelete(‘nombre_tabla’, {
    Campo2: {
    [Op.between]: [27, 28]
    },
    }, {})
    };

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Las siguientes reglas del RGPD deben leerse y aceptarse:
Este formulario recopila tu nombre, correo electrónico y e contenido para que podamos realizar un seguimiento de los comentarios dejados en la web. Para más información revisa nuestra política de privacidad, donde encontrarás más información sobre dónde, cómo y por qué almacenamos tus datos.