No estoy seguro de lo que me estoy perdiendo, pensé que poner Juegos entre paréntesis me permitiría hacer una inserción masiva en MySQL. Sin embargo, cuando hago esto, vuelve como (OBJETO, OBJETO). Si elimino los corchetes, solo obtengo un solo inserto, ¡pero funciona! ¿Alguna sugerencia para hacer una inserción masiva?
Breve muestra de la matriz
[{title:xxx,link:https://xxxx,description:xxx.,xxx:xxxxx},{title:xxx,link:https://xxxx,description:xxx.,xxx:xxxxx}]JavaScript
// Writing the Games inside a json file fs.writeFile("feed.json", JSON.stringify(Games), function(err) { if (err) throw err; console.log("Saved!"); }); con.connect(function(err) { if (err) throw err; console.log("Connected!"); var sqlquery = "INSERT INTO gtable (title, link, description, company) VALUES ?"; let queryData = { sql: sqlquery, values: [Games] } con.query(queryData, function (err, result) { if (err) throw err; console.log("Number of records inserted: " + result.affectedRows); }); });Creo que su problema puede ser que está pasando una matriz de objetos mientras que MySQL espera una matriz de matrices.
Su formato es básicamente:
var sqlquery = "INSERT INTO gtable (title, link, description, company) VALUES ?"; var values = [ [{title:xxx,link:https://xxxx,description:xxx.,xxx:xxxxx} {title:xxx,link:https://xxxx,description:xxx.,xxx:xxxxx}] ];Cuándo debería ser:
var sqlquery = "INSERT INTO gtable (title, link, description, company) VALUES ?"; var values = [ [[title1,link1,description1,xxx1], [title2,link2,description2,xxx2]] ];Necesitaría convertir cada objeto en una matriz de solo sus valores. Lo que podrías hacer con algo como esto, creo:
let sqlValues = Games.map(obj => Object.values(obj));EDITAR: Tenía el formato incorrecto para el mapeo, corregido ahora.
Creo que @otw tiene una solución sólida (y una explicación increíble de por qué sucede esto), pero para ofrecer una solución alternativa, podría hacer algo como esto:
Games.forEach(game => { con.query('INSERT INTO gtable SET ?', game, insertErr => { if (insertErr) { throw new Error("Error inserting game " + game.title + "! " + insertErr); } console.log(`Inserted ${game.title}!`); }); })