Запросы к базе данных

Последнее обновление: 24.11.2023

Рассмотим базовые операции с данными на примере модели из прошлой темы:

const Sequelize = require("sequelize");
const sequelize = new Sequelize({
    dialect: "sqlite",
    storage: "metanit.db",
    define: {
        timestamps: false
    }
});
const User = sequelize.define("user", {
  id: {
    type: Sequelize.INTEGER,
    autoIncrement: true,
    primaryKey: true,
    allowNull: false
  },
  name: {
    type: Sequelize.STRING,
    allowNull: false
  },
  age: {
    type: Sequelize.INTEGER,
    allowNull: false
  }
});

Добавление данных

Для добавления данных в бд у модели вызывается метод create(), в который передается добавляемый объект:

User.create({
    name: "Tom",
    age: 35
  }).then(res=>{
    console.log(res);
  }).catch(err=>console.log(err));

Как мы видим, свойства передаваемого в метод create объекта соответствуют свойствам модели User за исключением свойства id, которое генерируется базой данных.

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

User.create({
  name: "Bob",
  age: 31
}).then(res=>{
  const user = {id: res.id, name: res.name, age: res.age}
  console.log(user);
}).catch(err=>console.log(err));

Получение данных

Для извлечения всех данных применяется метод findAll():

User.findAll({raw:true}).then(users=>{
  console.log(users);
}).catch(err=>console.log(err));

В данном случае в метод передается необязательный объект {raw:true}, который позволяет получить непосредственно данны из БД в вид объектов без дополнительных метаданных. Например, консольный вывод в моем случае выглядел следующим образом:

[ { id: 1, name: 'Tom', age: 35 },
  { id: 2, name: 'Bob', age: 31 } ]

Простейшая фильтрация

Для применения фильтрации при получении данных (а также при обновлении и удалении) применяется оператор where, который указывает на критерий фильтрации. Например, выберем из БД всех пользователей, у которых name="Tom":

User.findAll({where:{name: "Tom"}, raw: true })
.then(users=>{
  console.log(users);
}).catch(err=>console.log(err));

Консольный вывод в данном случае:

[ { id: 1, name: 'Tom', age: 35 }]

Получение одного объекта

Нередко необходимо получить лишь один объект из БД. В этом случае мы можем использовать такие методы как findByPk() (получает объект по первичному ключу) и findOne() (получает один объект по определенному критерию). Например, получим пользователя с id=2:

User.findByPk(2)
.then(user=>{
	if(!user) return; // если пользователь не найден
	console.log(user.name);
}).catch(err=>console.log(err));

Или получим одного пользователя с именем Tom:

User.findOne({where: {name: "Tom"}})
.then(user=>{
	if(!user) return;
	console.log(user.name, user.age);
}).catch(err=>console.log(err));

Обновление

Для обновления применяется метод update(), в который передается объект с новыми значениями и объект-критерий выборки обновляемых объектов:

User.update({ age: 36 }, {
  where: {
    name: "Bob"
  }
}).then((res) => {
  console.log(res);
});

В данном случае первый объект указывает, что все обновляемые объекты будут получать для поля age значение 36. Второй объект указывает на критерий выборки - обновляются только объекты, у которых name="Bob".

Удаление

Для удаления используется метод destroy(), в который передается объект-критерий выборки удаляемых объектов:

User.destroy({
  where: {
    name: "Bob"
  }
}).then((res) => {
  console.log(res);
});

В данном случае удаляются объекты, у которых name="Bob".

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850