1.27M
Category: databasedatabase

Знакомство с Sequelize ORM

1.

фаза 1 · неделя 5 · день 3
Знакомство с
Sequelize ORM

2.

План
● ORM
● Sequelize
○ Подключение к БД
○ Создание модели и миграции
○ Методы модели

3.

ORM
Объектно-реляционное отображение — это подход для работы
с базой данных с помощью объектно-ориентированного кода.

4.

Sequelize
npm i sequelize pg pg-hstore sequelize-cli
● sequelize — ORM для PostgreSQL и других СУБД.
Это библиотека для Node.js, основанная на промисах.
● pg, pg-hstore — пакеты для работы с PostgreSQL.
● sequelize-cli — набор консольных инструментов. Упрощает
инициализацию проекта, работу с моделями, миграциями, сидами.

5.

Sequelize CLI
npx sequelize
Команда для запуска Sequelize CLI.
Выводит шпаргалку по доступным командам.
npx sequelize init
Команда генерации шаблона для работы с Sequelize. Создаёт папки
для хранения реквизитов подключения, моделей, миграций, сидеров.

6.

Реквизиты подключения
{
"development": {
"username": "your-username",
"password": "your-password",
"database": "your-database",
"host": "127.0.0.1",
"dialect": "postgres"
}
}

7.

Проверка подключения к БД
const db = require('./models'); // подключить index.js из папки с моделями
async function testConnection() {
try {
await db.sequelize.authenticate();
// отправить тестовый запрос в БД
console.log('БД подключена успешно');
} catch (error) {
console.log('Ошибка подключения к БД', error.message);
}
}

8.

Модели
Модель — это класс, представляющий таблицу в базе данных.
Экземпляры этого класса описывают строки в таблице.

9.

Создать модель
npx sequelize model:create --name User --attributes
login:text,displayName:text
Эта команда создаст модель User и миграцию для таблицы Users.
Список типов данных Sequelize:
https://sequelize.org/docs/v6/core-concepts/model-basics/#data-types

10.

Структура модели
class User extends Model { /* ... */ }
User.init(
{
// атрибуты модели — каждый ключ описывает колонку в таблице
login: DataTypes.TEXT,
displayName: DataTypes.TEXT,
},
{
// дополнительные опции модели
},
);

11.

Изменение модели
Созданную модель можно и часто нужно редактировать.
Чем точнее описаны ограничения, тем лучше (например, references, notNull,
unique и так далее).
Список доступных настроек в документации по методу init:
https://sequelize.org/api/v6/class/src/model.js~model#static-method-init

12.

Структура модели
User.init(
{
// атрибут, описанный детально
login: {
type: DataTypes.TEXT,
unique: true,
allowNull: false,
},
// ...
// ...
},
);

13.

Миграции
Миграция — это способ описать изменение в структуре базы данных.
Файл миграции в Sequelize содержит две функции: up для изменения
структуры БД, down для возврата к предыдущей версии структуры.

14.

Применение и отмена миграций
Чтобы описанные в миграции изменения были выполнены, необходимо её
применить — то есть, вызвать функцию up.
npx sequelize db:migrate
Запустить все неприменённые миграции по очереди.
npx sequelize db:migrate:undo:all
Отменить все применённые миграции по очереди в обратном порядке.

15.

Изменение миграции
Миграцию можно менять только в следующих случаях:
● эта миграция ещё не была применена к какой-либо БД,
● либо эта миграция была отменена для всех БД, где её ранее
применяли.
Если вы закоммитили миграцию и опубликовали её —
менять эту миграцию не стоит.

16.

Методы моделей
У Sequelize-моделей есть методы для всех CRUD-операций с записями.
Все эти методы возвращают промис и могут принимать объект с
параметрами.

17.

CRUD операции
● INSERT → Model.create()
● SELECT → Model.findAll()
● UPDATE → Model.update()
● DELETE → Model.destroy()
Полный список методов моделей:
https://sequelize.org/api/v6/class/src/model.js~model

18.

Методы моделей: create
Метод create создает экземпляр модели и сохраняет его в БД.
const user = await User.create({
login: 'igor-1234',
displayName: 'Igor',
});

19.

Методы моделей: findAll
Метод findAll выполняет команду SELECT и возвращает промис со всеми
совпадениями.
const users = await User.findAll();
// SELECT * FROM "Users";

20.

Методы моделей: findAll + attributes
Можно выбирать конкретные столбцы через параметр attributes:
// SELECT login, "displayName" FROM "Users"
const users = await User.findAll({
attributes: ['login', 'displayName'],
});

21.

Методы моделей: findAll + where
Можно задавать условия выборки через параметр where:
// SELECT * FROM "Users" WHERE "isStudent" = true
const students = await User.findAll({
where: { isStudent: true },
});

22.

Методы моделей: findAll + attributes
Можно задавать несколько условий выборки:
// SELECT * FROM "Users"
// WHERE "isStudent" = true AND status = 'active';
const activeStudents = await User.findAll({
where: {
isStudent: true,
status: 'active',
},
});

23.

Методы моделей: update
Метод update редактирует записи в таблице, подходящие по заданным
параметрам.
// UPDATE "Users" SET "displayName" = 'Rauf' WHERE id = 3
await User.update(
{ displayName: 'Rauf' },
{ where: { id: 3 } },
);

24.

Методы моделей: destroy
Метод destroy удаляет записи, подходящие по заданным параметрам:
// DELETE "Users" WHERE "displayName" = 'Igor'
await User.destroy({
where: { name: 'Igor' },
});
English     Русский Rules