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

使用Sequelize原生查询批量插入MySQL多行数据遇问题

问题原因及解决方案

原因

你的写法存在两个核心问题:

  • MySQL批量插入的SQL语法要求多组值用逗号分隔,格式为VALUES (val1,val2), (val3,val4),但你的SQL语句仅写了一个占位符?,无法匹配多组数据。
  • 传入的参数是[['a', 'b'], ['c', 'd']],Sequelize会将第一个数组['a','b']替换到唯一的?位置,剩下的['c','d']不会被解析到SQL中,最终执行的SQL仅包含第一组数据,所以只插入了第一行。

解决方法

方法1:调整SQL占位符数量匹配参数组数

直接在SQL中为每组值添加对应的占位符:

connection.query(
    'INSERT INTO product (a, b) VALUES (?), (?);',
    [['a', 'b'], ['c', 'd']],
    (...args) => console.log(args)
);

方法2:使用MySQL支持的批量占位符语法

将参数包装为二维数组的嵌套结构,让Sequelize自动解析为多组值:

connection.query(
    'INSERT INTO product (a, b) VALUES ?;',
    [[['a', 'b'], ['c', 'd']]], // 外层多包一层数组
    (...args) => console.log(args)
);

方法3:使用Sequelize官方推荐的bulkCreate方法

这是ORM框架提供的标准批量插入方式,更安全且易维护:

connection.models.product.bulkCreate([
    { a: 'a', b: 'b' },
    { a: 'c', b: 'd' }
]).then(() => {
    console.log('批量插入完成');
}).catch(err => {
    console.error('插入失败:', err);
});

内容的提问来源于stack exchange,提问作者Alireza Bijantabar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:22:49