Проверяет умение выполнять сырые SQL-запросы через Sequelize, когда ORM-методов недостаточно для сложных выборок или оптимизаций.
Sequelize — это ORM для Node.js, но иногда возможностей моделей и методов вроде findAll не хватает: нужны сложные JOIN, оконные функции, специфичные для СУБД конструкции или оптимизированные запросы. В таких случаях Sequelize позволяет выполнять сырой SQL через метод sequelize.query().
Метод принимает SQL-строку и объект опций. Без опций возвращается массив из двух элементов: результаты и метаданные (например, affectedRows).
const [results, metadata] = await sequelize.query(
'SELECT * FROM users WHERE age > 18'
);
console.log(results); // массив строк
Чтобы сразу получить массив строк без метаданных, используй QueryTypes:
const { QueryTypes } = require('sequelize');
const users = await sequelize.query(
'SELECT * FROM users WHERE age > :age',
{
replacements: { age: 18 },
type: QueryTypes.SELECT
}
);
Никогда не склеивай значения в строку вручную. Sequelize предлагает два механизма:
// replacements
await sequelize.query(
'SELECT * FROM users WHERE id IN (:ids)',
{ replacements: { ids: [1, 2, 3] }, type: QueryTypes.SELECT }
);
// bind
await sequelize.query(
'SELECT * FROM users WHERE id = $1',
{ bind: [1], type: QueryTypes.SELECT }
);
QueryTypes.INSERT, UPDATE, DELETE возвращают метаданные с количеством затронутых строк. Для вызова хранимых процедур используй QueryTypes.RAW.
Итог: применяй sequelize.query, когда ORM-методы неэффективны или невозможны, но всегда используй replacements или bind для безопасности и явно указывай type для удобства.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию