You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Node.js和Express将JSON数组批量插入MySQL数据库?

解决MySQL批量插入JSON数组所有记录的问题

你的问题出在SQL语句的写法上:INSERT INTO products SET ?是单条插入的语法,当你传入数组时,mysql驱动只会解析数组的第一个元素,所以只插入了第一条记录。要实现批量插入,需要改用MySQL的批量插入语法,并调整数据格式。

修改后的代码示例

const { readFileSync } = require('fs');
const products = JSON.parse(readFileSync('./Zahabi-Products.json', 'utf8'));

// 1. 定义要插入的列名(需与JSON对象的字段一一对应)
const columns = ['DESCRIPTION', 'TYPE', 'CLASSIFICATION', 'BRAND', 'ORIGIN', 'FAMILY', 'ar_classification'];

// 2. 将JSON数组转换为批量插入需要的二维数组格式
const values = products.map(product => columns.map(col => product[col]));

// 3. 执行批量插入
pool.query(
  `INSERT INTO products (${columns.join(', ')}) VALUES ?`,
  [values],
  function(err, result) {
    if (err) throw err;
    console.log(`成功插入 ${result.affectedRows} 条记录`);
  }
);

关键说明

  • SQL语法调整:INSERT INTO 表名 (列1,列2...) VALUES ?是MySQL批量插入的标准语法,?会被替换为二维数组对应的多行值。
  • 数据格式转换:map方法将每个JSON对象转换成对应列的值数组,最终形成[[值1,值2...], [值1,值2...]]的二维数组,这是mysql驱动要求的批量插入参数格式。
  • 字段一致性:确保columns数组中的列名和数据库表的列名完全一致,且顺序和values数组中的值顺序对应,否则会出现字段值不匹配的问题。

额外注意事项

  • 若你的JSON对象存在字段缺失的情况,可在map时添加默认值(比如product[col] || ''),避免插入空值报错(根据你的表字段是否允许null调整)。
  • 对于1000条记录的规模,直接批量插入即可;如果记录数上万,建议分批次插入(比如每500条一批),避免超出MySQL的max_allowed_packet限制。

内容的提问来源于stack exchange,提问作者Abdullah Manafikhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:05:42