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
- 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. - 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. - 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. - 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
- 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.
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]
},
}, {})
};
Hola,
Muchas gracias por el comentario, tienes razón lo edito!!
Un saludo!!