Sequelizejs:如何使用事务和原始查询

use*_*341 2 sequelize.js

我正在使用sequelize orm.我在他们的文档中找不到如何在使用原始查询时使用事务.我所看到的只是模型定义的查询方法.但是对于原始查询,没有关于将事务对象放在何处用于该特定查询的规范.

Jan*_*ier 9

http://docs.sequelizejs.com/en/latest/api/sequelize/#querysql-options-promise

[options.transaction = null]事务应在其下执行查询的事务


Pet*_*ter 5

上面的链接对我没有帮助,但已经找到了解决方案:(如果您在 catch 块中回滚,事务将被还原。)

  sequelize.transaction(async transaction => {
    try {
      await sequelize.query(
        `
        UPDATE Balances
        SET amount = @amount := amount - ${10}
        WHERE userId=${1}`,
        {
          type: Sequelize.QueryTypes.UPDATE,
          transaction,
          raw: true
        },
      )

      await sequelize.query(
        `
        UPDATE Balances
        SET amount = @amount := amount - ${10}
        WHERE userId=${2}`,
        {
          type: Sequelize.QueryTypes.UPDATE,
          transaction,
          raw: true
        },
      )

    } catch (error) {
      transaction.rollback();
      throw `TRANSACTION_ERROR`;
    }
  })
Run Code Online (Sandbox Code Playgroud)