我在sqlite数据库中有一个包含大量记录的表。我想更新一些具有某些值的记录的特定列。
例如,如果我有一个名为' priority'并且用户更新优先级'对于ID为1,2和3且值为10,11和12的记录。然后我想用新值更新这些记录的相应优先级。
我一直在浏览docs但尚未找到使用交易进行批量更新的方法。他们说交易会带来承诺。
在我的特定用例中:
return sequelize.transaction(function (t) {
// chain all your queries here. make sure you return them.
return User.findbyId(1, {transaction: t}).then(function (user) {
return user.updateAttributes({
priority: 10
}, {transaction: t});
});
}).then(function (result) {
// Transaction has been committed
// result is whatever the result of the promise chain returned to the transaction callback
}).catch(function (err) {
// Transaction has been rolled back
// err is whatever rejected the promise chain returned to the transaction callback
});
但是,我想像我提到的那样找到并更新一堆行。我必须在for循环中做什么?由于事物的异步性,promise实现如何处理for循环?我想使用交易,因为如果任何更新失败,承诺将无法解决,承诺将不会发生。因此,只有在所有更新都成功完成后才会进行提交。
感谢任何帮助。
答案 0 :(得分:3)
你必须在循环时使用promises:
return sequelize.transaction(function (t) {
return sequelize.Promise.each(thingstoupdate, function (thingtoupdate) {
return thingtoupdate.update(foo, { transaction: t })
});
}).then(function (result) {
// Transaction has been committed
// result is whatever the result of the promise chain returned to the transaction callback
}).catch(function (err) {
// Transaction has been rolled back
// err is whatever rejected the promise chain returned to the transaction callback
});