Similar presentations:
Знакомство с Sequelize ORM
1.
фаза 1 · неделя 5 · день 3Знакомство с
Sequelize ORM
2.
План● ORM
● Sequelize
○ Подключение к БД
○ Создание модели и миграции
○ Методы модели
3.
ORMОбъектно-реляционное отображение — это подход для работы
с базой данных с помощью объектно-ориентированного кода.
4.
Sequelizenpm i sequelize pg pg-hstore sequelize-cli
● sequelize — ORM для PostgreSQL и других СУБД.
Это библиотека для Node.js, основанная на промисах.
● pg, pg-hstore — пакеты для работы с PostgreSQL.
● sequelize-cli — набор консольных инструментов. Упрощает
инициализацию проекта, работу с моделями, миграциями, сидами.
5.
Sequelize CLInpx 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' },
});
database