首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用预准备语句插入多行

使用预准备语句插入多行
EN

Stack Overflow用户
提问于 2015-12-03 06:06:40
回答 2查看 729关注 0票数 1

我有一个对象数组,每个对象都有多个属性。例如:

代码语言:javascript
复制
var obj = [{a : '1', b : '2'},{a : '3', b : '4'}];

为了匹配数据库表的顺序序列,我生成了一个具有批量插入所需序列的新数组。

代码语言:javascript
复制
var bulkInsert = function(arrData){
    var orderedData = [];
    arrData.forEach(function(obj){
        orderedData.push(obj.b + ',' + obj.a);
    });
    return orderedData;
};

现在,我想将对象的输出数组批量插入postgres表中:

代码语言:javascript
复制
client.query("INSERT INTO sometable(b, a) VALUES" +
    " ($1, $2)", [orderedData], function (err, result) {
        if (err) {
            return handleError(err, client, done);
        }
    });

但是,这会抛出一个错误:

代码语言:javascript
复制
error fetching client from pool { [error: bind message supplies 1 parameters, but prepared statement "" requires 2]

如果每次插入都在循环上迭代,则串行版本工作得很好,但对于较大的数组,它将很慢。

EN

回答 2

Stack Overflow用户

发布于 2015-12-03 06:09:10

尝试从阵列中卸下方括号。它已经是一个数组了,你不需要它们

票数 0
EN

Stack Overflow用户

发布于 2015-12-04 23:43:58

您应该将参数作为两个大小的数组进行传递。以便同时插入两行。尝试将以下查询重复两次:

代码语言:javascript
复制
client.query("INSERT INTO sometable(b, a) VALUES" + " ($1, $2)", [1,2], function (err, result) { if (err) { return handleError(err, client, done); } });

client.query("INSERT INTO sometable(b, a) VALUES" + " ($1, $2)", [3,4], function (err, result) { if (err) { return handleError(err, client, done); } });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34054023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档