Найти в Дзене
Блог IT разработчика

Работаем с базой данных с помощью Sequelize. Обновляем, удаляем данные

Продолжаем изучать работу с таблицами по средствам ORM Sequelize.

В предыдущей статье https://dzen.ru/a/Z30I_2HePBLeB7yf мы познакомились с основами. Мы научились создавать/описывать модель данных(таблицы) по средствам Sequelize, задавать различные типы данных, учиться делать синхронизацию с помощью команды Sync, выводить данные по средствам findAll. Мы написали несколько простых запросов.

Переходим к сложным запросам

В данной статье мы научимся создавать запрос на добавление, добавим 1000 строк в базе данных, произведем удаление всех строк, произведем обновление строк.

Для начала вспомним нашу функцию создания записи в базу данных

Добавление данных

async function CreateItemInTable(login,name,email,password)
{log.debug("CreateItemInTable()");
let t = await db.transaction();
try{await Users.create({login:login,name:name,email:email,password:password},{transaction:t});await t.commit();
}catch(e)
{await t.rollback();
log.debug(e.message);}}

Для записи 1000 строк в таблицу мы создадим цикл for

for (let i=0;i<1000;i++)
{ наш код }

Соответственно написанная функция ниже

const user = "admin";
let name = "admin";
let email = "email";
let password = "password";
for (let i=0;i<1000;i++)
{let login = `${user}_${i}`;
let check = await CheckItemInTable(login);
log.debug(check);
if (check)
{await CreateItemInTable(login,name,email,password);}}

Мы вызываем цикл, к логину добавляем цифру и передаем в функцию для создания пользователя.

Операторы

Sequelize предоставляет широкое число операторов для создания комплексных запросов. Под операторами можно понимать запрос where с каким-то фильтром.

Для использования операторов необходимо использовать объявление Op из библиотеки sequelize/core

import { Op } from '@sequelize/core';

Список:

  1. Op.eq и Op.ne - простые операторы эквивалентности. eq- эквивалентно, ne - не эквивалентно.
  2. Op.is - NU:: и Op.in - входит ли диапазон , например [1,2]
  3. Операторы сравнения Op.gt - больше чем, Op.gte - больше чем или равно, Op.lt - меньше чем, Op.lte - меньше чем или равно
  4. Операторы диапазона Op.between - входит в диапазон, Op.not - не входит в диапазон
  5. Операторы для нахождения шаблонов Op.like -подобный, Op.notLike - не подобный, дополнительно доступен оператор Op.iLike и Op.notILike для поиска без учета регистра.

Остальных операторов можно посмотреть на сайте https://sequelize.org/docs/v7/querying/operators/

Для поиска определенных строк нам нужно написать подобный вариант ниже

{
where:
{id:
{[Op.lt]:100000}
}

Удаление

Например, нам нужно удалить все строки, где Id < 100000. Нам необходимо использовать команду destroy. Записываем запрос

let t = await db.transaction();
try{await Users.destroy({where:{id:{[Op.lt]:100000}}},{transaction:t});
await t.commit();
}catch(e)
{await t.rollback();
log.debug(e.message);}

Для удаления полной таблицы необходимо использовать truncate со значением true.

await User.destroy({

truncate: true,

});

Обновление

Для обновления данных нам необходимо использовать функцию update.

update (указываем параметры для обновления, потом указываем условие для обновления, потом указываем транзакцию).

await Users.update({email:"email@email.com"},{where:{id:{[Op.lt]:100000}}},{transaction:t});

-2
-3

Полный код команды

async function UpdateItem()
{let t = await db.transaction();
try{await Users.update({email:"email"},{where:{id:{[Op.lt]:100000}}},{transaction:t});
await t.commit();
}catch(e)
{await t.rollback();
log.debug(e.message);}}

Напоминаю, что теперь у меня есть свой канал в телеграмме https://t.me/businessarchitecture_ru. Подписывайтесь, если хотите видеть больше уроков по разработке и мои мысли на волнующие темы.

Спасибо, что читаете меня. Не забывайте ставить лайки и подписываться на канал. Всем добра и хорошего настроения