Consultando o Banco de Dados com Sequelize no Node.js
Vamos aprender a realizar operações básicas com dados usando o exemplo de modelo do último tema:
const Sequelize = require("sequelize");
const sequelize = new Sequelize({
dialect: "sqlite",
storage: "programicio.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,
},
});
Adicionando Dados
Para adicionar dados ao banco, utiliza-se o método create()
do modelo, ao qual se passa o objeto a ser inserido:
User.create({
name: "Tom",
age: 35,
})
.then((res) => {
console.log(res);
})
.catch((err) => console.log(err));
Como podemos observar, as propriedades do objeto passado ao método create
correspondem às propriedades do modelo User
, com exceção do atributo id
, que é gerado pelo banco de dados.
Após a operação de inserção, podemos acessar o objeto adicionado, incluindo seu id
gerado pelo banco de dados:
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));
Obtendo Dados
Para obter todos os dados, utiliza-se o método findAll()
:
User.findAll({ raw: true })
.then((users) => {
console.log(users);
})
.catch((err) => console.log(err));
Neste exemplo, o método recebe um objeto opcional {raw: true}
, que permite obter diretamente os dados do banco no formato de objetos sem metadados adicionais. Por exemplo, a saída no console pode ser a seguinte:
[
{ id: 1, name: "Tom", age: 35 },
{ id: 2, name: "Bob", age: 31 },
];
Filtro Simples
Para aplicar filtros em consultas (assim como em operações de atualização e remoção), usa-se o operador where
, que especifica o critério de filtro. Por exemplo, vamos selecionar todos os usuários do banco cujo nome seja "Tom":
User.findAll({ where: { name: "Tom" }, raw: true })
.then((users) => {
console.log(users);
})
.catch((err) => console.log(err));
A saída no console será:
[{ id: 1, name: "Tom", age: 35 }];
Obtendo um Único Objeto
Frequentemente, precisamos obter apenas um objeto do banco de dados. Nesse caso, podemos usar métodos como findByPk()
(obtém o objeto pela chave primária) e findOne()
(obtém um objeto que corresponde a um critério específico). Por exemplo, vamos buscar o usuário com id=2
:
User.findByPk(2)
.then((user) => {
if (!user) return; // se o usuário não for encontrado
console.log(user.name);
})
.catch((err) => console.log(err));
Ou podemos buscar um usuário com o nome "Tom":
User.findOne({ where: { name: "Tom" } })
.then((user) => {
if (!user) return;
console.log(user.name, user.age);
})
.catch((err) => console.log(err));
Atualizando Dados
Para atualizar dados, utiliza-se o método update()
, ao qual se passa um objeto com os novos valores e um objeto critério para seleção dos objetos a serem atualizados:
User.update(
{ age: 36 },
{
where: {
name: "Bob",
},
}
).then((res) => {
console.log(res);
});
Neste caso, o primeiro objeto indica que todos os objetos selecionados terão o campo age
atualizado para o valor 36. O segundo objeto especifica o critério de seleção: somente os objetos com name="Bob"
serão atualizados.
Removendo Dados
Para remover dados, utiliza-se o método destroy()
, ao qual se passa um objeto critério para seleção dos objetos a serem deletados:
User.destroy({
where: {
name: "Bob",
},
}).then((res) => {
console.log(res);
});
Neste exemplo, serão removidos os objetos cujo name seja "Bob".