Баннер мобильный (3) Пройти тест

Sequelize

Глоссарий

27 марта 2023

Поделиться

Скопировано

Содержание

    Sequelize — это инструмент для организации взаимодействия между платформой Node.js и реляционными базами данными без использования специального языка запросов SQL. Sequelize относится к объектно-реляционным сопоставителям (ORM): связывает базы данных (Postgres, MySQL, MariaDB, SQLite и Microsoft SQL Server) с объектами JavaScript, создавая виртуальную объектную базу данных.

    Sequelize играет роль сопоставителя между базой SQL и приложением

    Установка Sequelize и подключение к базе данных

    Для установки Sequelize с помощью менеджера пакетов NPM нужно выполнить команду:

    $ npm install —save sequelize

    После этого необходимо установить драйвер для взаимодействия с базой данных, которая используется в приложении.

    Postgres:
    $ npm install —save pg pg-hstore

    MySQL:
    $ npm install —save mysql2

    MariaDB:
    $ npm install —save mariadb

    SQLite:
    $ npm install —save sqlite3

    Microsoft SQL Server:
    $ npm install —save tedious

    После установки драйвера выполняют подключение к базе данных. Это можно сделать несколькими способами в зависимости от типа базы:

    const { Sequelize } = require(‘sequelize’);

    Способ 1 — с передачей уникального идентификатора URI:

    const sequelize = new Sequelize(‘sqlite::memory:’) // (для SQLite)
    const sequelize = new Sequelize(‘postgres://user:pass@
    example.com:5432/dbname) // (для Postgres)

    Способ 2 — с передачей параметров подключения по отдельности (для SQLite)

    const sequelize = new Sequelize({
    dialect: ‘sqlite’,
    storage: ‘path/to/database.sqlite’
    });

    Способ 3 — с передачей параметров подключения по отдельности (для остальных баз данных)

    const sequelize = new Sequelize(‘database’, ‘username’, ‘password’, { host: ‘localhost’,
    dialect: /* один из ‘mysql’ | ‘mariadb’ | ‘postgres’ | ‘mssql’ */});

    Для проверки подключения используется функция .authenticate():try
    { await sequelize.authenticate();
    console.log(‘Установлено подключение к базе данных.’);} catch (error) {
    console.error(‘Не удалось установить подключение к базе данных:’, error);
    }

    Для закрытия подключения вызывают функцию sequelize.close().

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

    Концепция и создание моделей

    Модель в Sequelize — это абстракция, которая представляет собой таблицу базы данных. Она передает системе название, количество столбцов и тип содержащейся в них информации. Каждая модель имеет собственное имя. Чаще всего оно совпадает с названием таблицы. Например, если таблица называется Accounts («учетные записи», множественное число), то имя модели будет Account («учетная запись», единственное число).

    Для определения моделей в Sequelize существует два способа:

    1. Вызов sequelize.define(modelName, attributes, options) с передачей функции имени модели, атрибутов и опций.
    2. Расширение класса Model и вызов init(attributes, options) с передачей атрибутов и опций.

    Рассмотрим создание модели на примере. Предположим, что у нас есть таблица Accounts, и на ее основе мы хотим создать модель Account, в которой будут содержаться данные учетных записей пользователей — userLogin и userPassword. Для обращения к модели будет использоваться метод sequelize.models.Account.

    Первый способ – с использованием sequelize.define:

    const { Sequelize, DataTypes } = require(‘sequelize’);
    const sequelize = new Sequelize(‘sqlite::memory:’);
    const Account = sequelize.define(‘Account’, {
    // определение атрибутов модели
    userLogin: {
    type: DataTypes.STRING,
    allowNull: false
    },
    userPassword: {
    type: DataTypes.STRING
    // значение allowNull равно true по умолчанию
    }
    }, {
    // другие опции модели
    });
    // `sequelize.define` возвращает созданную модель
    console.log(Account === sequelize.models.Account); // true

    Второй способ — расширение класса Model:

    const { Sequelize, DataTypes, Model } = require(‘sequelize’);
    const sequelize = new Sequelize(‘sqlite::memory:’);
    class Account extends Model {}
    Account.init({
    // определение атрибутов
    userLogin: {
    type: DataTypes.STRING,
    allowNull: false
    },
    userPassword: {
    type: DataTypes.STRING
    // значение allowNull равно по умолчанию true
    }
    },{
    // дополнительные опции
    sequelize, // создание подключения
    modelName: ‘Account’ // определение имени модели
    });
    // определяемой моделью является сам класс
    console.log(Account === sequelize.models.Account); // true

    Во время создания модели с помощью первого способа sequelize.define вызывает Model.init, поэтому оба подхода являются равнозначными.

    Sequelize самостоятельно сопоставляет объекты в памяти с записями базы SQL

    Геттеры, сеттеры и виртуальные атрибуты

    Геттер — это функция get(), определенная для одного столбца модели. Как и в случае со стандартными геттерами JavaScript, геттеры Sequelize автоматически вызываются во время чтения значений в полях столбца.

    Сеттер — это функция set(), которая также определяется для конкретного столбца модели. Сеттер получает устанавливаемое значение.

    Sequelize позволяет определять пользовательские геттеры и сеттеры для атрибутов моделей. Кроме того, предусмотрено определение виртуальных атрибутов — они не существуют в исходной таблице базы данных, Sequelize создает их автоматически. Например, если в модели User («пользователь») имена и фамилии хранятся по отдельности, в полях firstName и lastName, Sequelize может создать виртуальное поле fullName («полное имя»), в котором имя и фамилия находятся вместе. Создание виртуального атрибута выполняется с помощью специального типа данных — DataTypes.VIRTUAL:

    const { DataTypes } = require(«sequelize»);
    const User = sequelize.define(‘user’, {
    firstName: DataTypes.TEXT,
    lastName: DataTypes.TEXT,
    fullName: {
    type: DataTypes.VIRTUAL,
    get() {
    return `${this.firstName} ${this.lastName}`;
    },
    set(value) {
    throw new Error(‘Не пытайтесь установить значение`fullName`!’); }
    }
    });

    Sequelize предоставляет программистам возможность работать с реляционными базами данных, не используя специальный язык запросов SQL. Во время создания, удаления, чтения и обновления объектов в приложении Sequelize самостоятельно строит и выполняет все запросы к базе данных. 

    Поделиться

    Скопировано

    0 комментариев

    Комментарии