【发布时间】:2017-03-25 10:18:35
【问题描述】:
我想使用Knex.js执行批量更新
例如:
'UPDATE foo SET [theValues] WHERE idFoo = 1'
'UPDATE foo SET [theValues] WHERE idFoo = 2'
有价值观:
{ name: "FooName1", checked: true } // to `idFoo = 1`
{ name: "FooName2", checked: false } // to `idFoo = 2`
我之前使用的是node-mysql,它允许多个语句。在使用它时,我只是构建了一个多语句查询字符串,并在一次运行中通过线路发送它。
我不确定如何使用 Knex 实现相同的效果。我可以将batchInsert 视为我可以使用的API 方法,但就batchUpdate 而言,什么都没有。
注意:
我可以进行异步迭代并分别更新每一行。这很糟糕,因为这意味着从服务器到数据库会有很多往返
我可以使用 Knex 的
raw()东西,并且可能做一些类似于我对 node-mysql 所做的事情。然而,这违背了作为 DB 抽象层的整个 knex 目的(它引入了强 DB 耦合)
所以我想使用“knex-y”来做到这一点。
欢迎任何想法。
【问题讨论】:
-
为什么不做并行异步操作呢?它会消耗更多的 RAM,因为您要为每次更新注册回调,但从网卡的角度来看,它看起来就像一个大更新流。
-
@slebetman 听起来不错 - 我会试一试,如果看起来不错,我会发布答案
-
@slebetman 1.5 年后重新审视这个问题。那时,我采用了您的解决方案,而不是我接受的解决方案,并且效果很好。如果你来写一个答案,我会接受你的。
标签: javascript knex.js