Написание запросов RAW SQL в Sequelize для Express JS.

Перейти к профилю Виктора Нвайву

Виктор Нвайву

Этот пост является напоминанием мне о том, как я смог отладить проблему, связанную с использованием Sequelize необработанные SQL-запросы в проекте, над которым я работал некоторое время назад. У меня была такая же проблема в другом проекте, над которым я работал, и когда я смог понять это, я сказал себе, что запишу шаги, которые я предпринял, чтобы убедиться, что я больше не столкнусь с такой проблемой. Надеюсь, этот пост также поможет кому-то, сэкономит вам бесчисленное количество часов и сделает вас более продуктивным.

В большинстве случаев, когда мы используем Sequelize , мы используем встроенные запросы, потому что они обрабатывают основные запросы, которые мы можем захотеть выполнить в нашем приложении. Но наступает время, когда мы хотим делать больше, чем просто простые запросы, выполнять более сложные запросы, и мы задаемся вопросом, Sequelize может справиться с этим. Ответ положительный. Но документация может быть немного сложной для понимания поначалу. Я буду использовать пример проекта, над которым я работал, чтобы показать, как мы можем писать сложные необработанные SQL-запросы в sequelize и экспресс js.

Настроив проект с помощью sequelize ваш model/index.js может выглядеть примерно так:

В этом примере мы пытаемся получить следующие результаты из БД:

  • Весь заработок за все автомобили, которыми они владеют.
  • Весь заработок за все принадлежащие им автомобили за текущий месяц.


отформатированный фрагмент кода

Здесь мы используем два способа написания необработанных SQL-запросов в sequelize.

Код из строки 21–24 использует sequelize queryTpes это определяет способ возврата результата. Когда мы используем это type вариант, возвращаемый результат представляет собой обычный массив объектов, который представляет затронутые/возвращенные строки.

Код из строки 27–31 использует свойство модели, которое сообщает sequelize чтобы вернуть результат как экземпляр указанной модели. Это полезно, если вы хотите использовать экземпляр модели для выполнения других действий.

Кроме того, из фрагмента кода мы видим, что некоторые параметры передаются в sequelize.query() метод.


аргументы опции запроса

Вариант замены может быть в двух формах


необязательный формат замены

Если вы посмотрите на первый фрагмент, динамические значения в необработанном запросе заключены в () и ключ вставлен в него. Это позволяет sequelize проверить в replacement свойство для связанного ключа в запросе. Таким образом, при использовании этого формата свойство замены представляет собой объект со связанными ключами в запросе, определенном в нем.

Для второго фрагмента replacement свойство представляет собой массив, который интерпретируется запросом ? символ.

Другая проблема, с которой вы можете столкнуться, заключается в том, что имя вашей модели указано в camelCase. или же отличается от того, как это определено в таблице. Вам нужно будет избежать имени таблицы, иначе sequelize бросил быrelation does not exist error. Я надеюсь, что это поможет кому-то там, а также поможет мне в будущем. Не стесняйтесь обращаться ко мне, если у вас есть какие-либо вопросы относительно написания необработанных запросов в Сиквел.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *