• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

107
Vistas
¿Cómo insertar múltiples consultas en el nodo js mysql después de leer desde el archivo de Excel y la inserción depende de las filas de Excel?

Tengo un escenario en el que necesito leer el contenido de un archivo de Excel. En el archivo de Excel hay una columna que indica si una fila es primaria o no. Otros serán filas secundarias de la fila principal. Necesito insertar primario en una tabla. Obtenga el último insertId y almacene las filas secundarias en otra tabla. Pero siempre recibo algún error relacionado con "cosas de clave externa secundaria". A continuación se muestra el enfoque que estoy siguiendo.

Leyendo los contenidos de Excel con el siguiente código.

 let reader = require('xlsx'); module.exports.storeData = () =>{ const file = reader.readFile('./data/file.xlsx'); let data = [] const sheets = file.SheetNames // for(let i = 0; i < sheets.length; i++) // { const temp = reader.utils.sheet_to_json( file.Sheets[file.SheetNames[sheets.indexOf('sheet-name')]]) temp.forEach((res) => { data.push(res) }) // } this.pushToDB(data); }

A continuación se muestra cómo verifico si la fila es primaria y envío datos a 1 tabla y a la otra tabla. También estoy usando async. Pero no obtener last_insertId de forma asíncrona. Algunos datos de la tabla principal se insertan pero no los datos de la tabla secundaria

 let last_insert_id = 0; const executeQuery = async (con, query, params) => { return new Promise((resolve, reject) => { con.query(query, params, (err, result) => { if (err) { return reject(err); } return resolve(result); }); }); } module.exports.pushToDB = async (data) => { var mysql = require('mysql'); var con = mysql.createConnection({ host: "localhost", user: "root", password: "", database: "data-db" }); con.connect(async function(err) { if (err) throw err; console.log("Connected!"); data.forEach(async (res, ind) => { try { if(res['Primary_Col'] == 'Yes'){ let param = ['col1'] const query1 = "INSERT INTO Main_Table (COL1) VALUES (?)"; const result = await executeQuery(con, query1, param); last_insert_id = result.insertId; console.log(last_insert_id); } if(res['Primary_Col'] == 'No'){ let param = ['col1', 'col2', 'col3' ] const query1 = "INSERT INTO SUB_TABLE (COL1, COL2, COL3) VALUES (?,?,?)"; const result = await executeQuery(con, query1, param.map(String)); //param array values will be changes to string } } catch (err) { con.destroy; throw err; } }); }); } this.storeData();

el error exacto

 Error: ER_NO_REFERENCED_ROW_2: Cannot add or update a child row: a foreign key constraint fails
about 3 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda