gpt4 book ai didi

node.js - 使用 node-mysql、NodeJS 和 Q 更新多行

转载 作者:搜寻专家 更新时间:2023-10-31 22:23:34 26 4
gpt4 key购买 nike

我正在使用 node-mysql、node-js 和 Q promises。

我已经使用上面的方法成功地更新、删除和插入了单行。以及在我的测试用例场景中的单个语句中插入多行。

但是,我需要在单个查询或 for 循环中使用不同的值(批处理模式)更新多行。

关于如何在 mysql2 中使用准备好的语句(应该在 node-mysql 上进行改进)的信息非常稀少并且没有示例,尽管这应该是自然的选择,以及补偿 node-js 异步性质的 promise .

此外,我已经在各种测试场景中成功使用了 defered.makeNodeResolver() 。

我正在尝试使用 where 子句和不断变化的条件更新单个查询中的多行。

当我更新单行时它正在工作。但是,当我尝试使用单个查询更新多行时,记录不会更新。

我准备切换到使用 for 循环执行多个更新,然后聚合结果并将其从服务器发送回客户端,这本来是我的第二个首选。如果没有太大的性能影响,我不明白为什么不应该这样做。但我还没有找到任何这样做的例子。

var values = [
{ users: "tom", id: 101 },
{ users: "george", id: 102 }
];

// var params = [values.users, values.id ];

var sql = 'UPDATE tabletest SET users = ? WHERE id = ?;';


connection.query(sql, [{users: values[0].users}, {id: values[0].id }], defered.makeNodeResolver());

上面显示的代码实际上并没有更新多行。我想我的语法有错误。

但无论如何,在这种特定情况下,解决此问题的最佳方法是什么?准备好的语句、for 循环中的重复查询或存储过程?

最佳答案

你可以这样做:

var values = [
{ users: "tom", id: 101 },
{ users: "george", id: 102 }
];
var queries = '';

values.forEach(function (item) {
queries += mysql.format("UPDATE tabletest SET users = ? WHERE id = ?; ", item);
});

connection.query(queries, defered.makeNodeResolver());

要使用多语句功能,您必须为您的连接启用它:

var connection = mysql.createConnection({
...
multipleStatements: true,
});

关于node.js - 使用 node-mysql、NodeJS 和 Q 更新多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25552115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com