問題

sequelizeで下記のようなRawクエリでデータ取得しようとしたが失敗した。

const { QueryTypes } = require('sequelize');

const query = `
    SELECT 
    FROM tests 
    WHERE status in ( $status )
`
await sequelize.query(
  query,
  {
    bind: { status: "'1','2','3'" },
    type: QueryTypes.SELECT
  }
);

原因

クエリがデータベースに送信される前に、sequelizeによってreplacementsがエスケープされてクエリに挿入されますが、バインドパラメーターはSQLクエリテキストの外部でデータベースに送信されます。

bindパラメータにはSQLクエリの構文を入れないようにする必要がある。

対応

bindの代わりにreplacementsを使用した。

参考

Raw Queries