Освоение Sequelize Raw запросов: подробное руководство

Sequelize — это популярная библиотека объектно-реляционного сопоставления (ORM) для Node.js, которая упрощает управление базами данных. Хотя Sequelize предоставляет API высокого уровня для большинства распространенных операций CRUD, бывают случаи, когда вам требуется больший контроль над вашими запросами. В таких случаях Sequelize предлагает возможность напрямую выполнять необработанные запросы. В этой статье будут рассмотрены различные методы использования необработанных запросов Sequelize, а также приведены примеры кода для улучшения взаимодействия с базой данных.

  1. Метод запроса:
    Метод queryпозволяет напрямую выполнить любой SQL-запрос. Он возвращает обещание, которое преобразуется в массив строк результатов.
const sequelize = require('sequelize');
const { QueryTypes } = sequelize;
sequelize.query('SELECT * FROM users', { type: QueryTypes.SELECT })
  .then((rows) => {
    console.log(rows);
  })
  .catch((error) => {
    console.error(error);
  });
  1. Выполнение необработанного SQL:
    Вы также можете выполнять операторы необработанного SQL, используя метод sequelize.query. Этот метод полезен, когда вам нужно выполнить такие операции, как вставка, обновление или удаление записей.
sequelize.query('INSERT INTO users (name, email) VALUES (?, ?)', {
  replacements: ['John Doe', 'john@example.com'],
  type: QueryTypes.INSERT
})
  .then((result) => {
    console.log(result);
  })
  .catch((error) => {
    console.error(error);
  });
  1. Подготовленные операторы.
    Sequelize поддерживает подготовленные операторы, которые могут повысить производительность и безопасность, особенно при работе с пользовательским вводом. Вы можете использовать заполнители (?или $1, $2и т. д.) и указывать значения с помощью параметра replacements.
sequelize.query('SELECT * FROM users WHERE id = ?', {
  replacements: [1],
  type: QueryTypes.SELECT
})
  .then((rows) => {
    console.log(rows);
  })
  .catch((error) => {
    console.error(error);
  });
  1. Экранирование значений.
    Чтобы предотвратить атаки с использованием SQL-инъекций, Sequelize автоматически экранирует значения, предоставленные посредством замены. Однако если вам нужно вручную экранировать значение, вы можете использовать метод sequelize.escape.
const { escape } = sequelize;
const username = "John' OR 1=1 --";
const escapedUsername = escape(username);
sequelize.query(`SELECT * FROM users WHERE username = ${escapedUsername}`, {
  type: QueryTypes.SELECT
})
  .then((rows) => {
    console.log(rows);
  })
  .catch((error) => {
    console.error(error);
  });

Секвелизация необработанных запросов предоставляет мощный набор инструментов для выполнения пользовательских операторов SQL непосредственно в приложении Node.js. Используя такие методы, как query, выполнение необработанного SQL, подготовленных операторов и экранирование значений, вы можете добиться большей гибкости и контроля над взаимодействием с базой данных. Понимание этих методов позволит вам оптимизировать производительность, повысить безопасность и эффективно справляться со сложными сценариями.