【问题标题】:Bulk update a table in sqlite database using sequelize使用 sequelize 批量更新 sqlite 数据库中的表
【发布时间】:2015-09-01 21:50:35
【问题描述】:

我在 sqlite 数据库中有一张表,里面有一堆记录。我想用某些值更新某些记录的特定列。

例如,如果我有一个名为“priority”的列,并且用户更新 ID 为 1,2 和 3 且值为 10,11 和 12 的记录的“priority”。然后我想更新这些记录的相应优先级使用新值。

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

感谢任何帮助。

【问题讨论】:

    标签: node.js sqlite transactions sequelize.js


    【解决方案1】:

    你必须在循环时使用承诺:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-18
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多