Продолжаем изучать работу с таблицами по средствам 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';
Список:
- Op.eq и Op.ne - простые операторы эквивалентности. eq- эквивалентно, ne - не эквивалентно.
- Op.is - NU:: и Op.in - входит ли диапазон , например [1,2]
- Операторы сравнения Op.gt - больше чем, Op.gte - больше чем или равно, Op.lt - меньше чем, Op.lte - меньше чем или равно
- Операторы диапазона Op.between - входит в диапазон, Op.not - не входит в диапазон
- Операторы для нахождения шаблонов 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});
Полный код команды
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. Подписывайтесь, если хотите видеть больше уроков по разработке и мои мысли на волнующие темы.
Спасибо, что читаете меня. Не забывайте ставить лайки и подписываться на канал. Всем добра и хорошего настроения