使用sequelize批量更新sqlite数据库中的表

时间:2015-09-01 09:16:52

标签: node.js sqlite transactions sequelize.js

我在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循环?我想使用交易,因为如果任何更新失败,承诺将无法解决,承诺将不会发生。因此,只有在所有更新都成功完成后才会进行提交。

感谢任何帮助。

1 个答案:

答案 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
});