Как использовать Sequelize для взаимодействия с PostgreSQL

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

Продолжить- одна из таких библиотек, и это очень популярная оболочка Node.js дляPostgreSQL,MySQLи другие базы данных.

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

Установить и настроить Sequelize

Под капотом Sequelize используетpgбиблиотека для подключения к PostgreSQL, поэтому при установкеsequelizenpm, нам также необходимо установитьpg:

npm install pg sequelize

Совет: не забудьте сначала запуститьnpm init -yесли проект новый и у вас нетpackage.jsonфайл уже.

В вашем файле Node.js вы сначала определяете переменные доступа к базе данных:

const user = '<postgres user>'
const host = 'localhost'
const database = '<postgres db name>'
const password = '<postgres password>'
const port = '<postgres port>'

Затем импортируйте 3 объекта изsequelize:

import { Sequelize, Model, DataTypes } from 'sequelize'

Затем вы можете инициализировать новыйSequelizeэкземпляр объекта с использованием этого синтаксиса:

const sequelize = new Sequelize(database, user, password, {
  host,
  port,
  dialect: 'postgres',
  logging: false
})

Мы сообщаем Sequelize, какая это база данных вdialectproperty (как уже упоминалось, он может обрабатывать не только Postgres).

Мы также отключаем ведение журнала, поскольку оно может быть очень подробным, поскольку регистрирует все запросы SQL, которые нам действительно не нужно просматривать (если вы не устраняете проблему).

Как создать модель Sequelize

Для каждой таблицы, которой вы хотите управлять с помощью Sequelize, вы создаетемодель.

Вот пример, предположим, у нас естьdogsтаблица с двумя столбцами:nameиage.

Мы создаемDogкласс, расширяющийModelбазовый класс:

import { Sequelize, Model, DataTypes } from 'sequelize'

const class Dog extends Model {}

Затем позвоните вinit()статический метод класса, описывающий данные, которые он содержит, и правила, которые мы хотим применить. В этом случае мы отключаемnull:

Dog.init({
  name: {
    type: DataTypes.STRING,
    allowNull: false
  },
  age: {
    type: DataTypes.INTEGER,
    allowNull: false
  }
}, {
  sequelize,
  modelName: 'dog',
  timestamps: false
})

Мы использовалиDataTypes.STRINGиDataTypes.INTEGER. ВDataTypesОбъект содержит ссылку на все типы, которые мы можем использовать, и они сопоставляются с каждым конкретным типом базы данных.См. Официальную документациюдля большего количества типов, которые вы можете использовать.

Как получить данные из базы данных

Теперь, когда у нас есть модель, как получить данные из таблицы?

Мы можем использоватьfindAll()метод:

Dog.findAll()

Вызов этого метода вернет список всех строк, и мы присвоим его переменной:

const results = await Dog.findAll()

Мы используемawaitпотому чтоfindAll()возвращает обещание

Чтобы ограничить количество извлекаемых столбцов, передайте объект сattributesмножество:

Dog.findAll({
  attributes: ['age']
})

ДобавитьWHEREпредложение к запросу с использованиемwhereсвойство. Например, получить всех собак с 8 лет:

Dog.findAll({
  where: {
    age: 8,
  }
})

Или получите всех собак старше 5 лет:

Dog.findAll({
  where: {
    age: {
      [Op.gte]: 5,
    }
  }
})

Дополнительные свойства позволяют выполнять другие операции, напримерlimitиorder:

Dog.findAll({
  limit: 10,
  order: [
    ['name', 'DESC']
  ]
})

Как вставить данные в базу

Мы можем позвонитьDog.create()передача объекта для создания новой строки в базе данных:

const name = 'Roger'
const age = 8
const result = await Dog.create({ name, age })

Как обновить данные

Использоватьupdate()метод обновления значений в таблице.

В этом примере я установил возраст «Роджера» на 9:

Post.update({
  age: 9
}, {
  where: {
    name: 'Roger'
  }
})

Удалениеwhereсвойство обновит все строки:

Post.update({
  age: 10
})

Скачать мою бесплатнуюСправочник по Node.js


Дополнительные руководства по узлам: