Texto de: Letícia Garcez
Introdução
Neste artigo, vamos conhecer o Knex. Essa biblioteca é um query-builder, ou “construtor de consultas” em tradução livre, para Node.js que interage com bancos relacionais. O Knex é capaz de facilitar (e muito) o acesso e interação com bancos de dados relacionais da sua aplicação, e veremos como logo abaixo.
Criando um projeto
Para usar o Knex, precisamos adicioná-lo a um projeto já existente com o comando npm install knex
. Também será necessário fazer a instalação de uma biblioteca referente ao cliente do banco de dados relacional que você quer que o Knex se conecte. Na documentação da ferramenta, você consegue encontrar uma lista dos bancos suportados e dos clientes recomendados para cada tipo de banco. Como utilizarei o MySQL neste artigo, será necessário rodar o comando npm install mysql2
para instalar o cliente deste banco.
Depois dessa instalação, é preciso configurar a instância do Knex com as credenciais para o acesso ao banco de dados da sua máquina. Um exemplo de configuração usando o MySQL pode ser visto no código abaixo:
const banco = require('knex')({
client: 'mysql2',
connection: {
host : '127.0.0.1',
port : 3306,
user : 'usuario',
password : 'senha',
database : 'meuBancoDeDados'
}
});
Uma vez que a configuração tenha sido feita, podemos usar a variável inicializada, banco
, para executar alguns comandos. Vamos começar criando uma tabela diretamente em um arquivo. Normalmente as tabelas utilizando Knex são criadas em migrations, porém não iremos abordar esse tema neste artigo.
Criar uma tabela
Para a criação da tabela, usaremos o método schema.createTable
. Esse método é chamado a partir da variável banco
definida anteriormente e recebe como primeiro parâmetro o nome da tabela que queremos criar e como segundo parâmetro uma função callback onde iremos definir os campos da tabela e algumas propriedades deles utilizando métodos definidos na sintaxe do Knex.
banco.schema.createTable("clientes", function (tabela) {
//escrutura(campos) da tabela
tabela.increments("id").primary();
tabela.string("nome").notNull();
tabela.string("sobrenome").notNull().defaulfTo("Silva");
})
Como podemos ver no código acima, adicionamos três colunas na nossa tabela, usando métodos no estilo TIPO(”Nome da Coluna”)
. Aqui usamos o tipo string para as colunas nome e sobrenome e o tipo increments, que criará um campo numérico com incremento automático, para o campo id. Depois disso, definimos mais algumas características dessas colunas. A coluna id, por exemplo, será a chave primária da tabela, enquanto as colunas nome e sobrenome não poderão possuir valores nulos. Na coluna sobrenome ainda foi adicionado um valor padrão, que é Silva.
Inserir dados na tabela
Após criar a tabela, podemos fazer algumas inserções nela. Para isso, precisamos especificar a tabela que queremos alterar, e utilizar o método insert
, responsável por fazer inserções na tabela. Um exemplo de como fazer a inserção de um elemento pode ser visto abaixo.
banco("clientes").insert({
nome: "Carlos",
sobrenome: "Almeida",
});
Além de inserir um único elemento, podemos inserir vários elementos passando para o método insert
um array de objetos:
banco("clientes").insert([
{
nome: "Mariana",
sobrenome: "Souza",
},{
nome: "Pedro"
//Como o sobrenome não foi especificado, será utilizado o valor padrão.
}
]);
O Knex também possui algumas sintaxes alternativas para a inserção de dados, que podem ser consultadas na documentação.
Consultar dados na tabela
As consultas do Knex são feitas utilizando o método select
após a especificação do nome da tabela onde os dados estão armazenados. Além do método select
, existem outros métodos que podem ser combinados com este para gerar consultas mais específicas. Veja alguns exemplos abaixo.
banco("clientes").select() //Selecionará todos os campos
banco("clientes").select(["id","nome"])//Selecionará apenas os campos id e nome
banco("clientes").select().first() //Seleciona só o primeiro elemento com todas as colunas
banco("clientes").select().where("id",1)//Seleciona o elemento onde o id é igual a 1
banco("clientes").select().where({nome:"Ana", sobrenome:"Silva"}) //Seleciona todos os elementos que possuirem o nome Ana e o sobrenome Silva
É importante salientar aqui que o assunto de consultas SQL é muito amplo e você pode verificar a seção de consultas da documentação do Knex clicando aqui caso tenha interesse em se aprofundar nas consultas.
Excluir dados da tabela
Para fazer a exclusão de dados, podemos identificar a tabela onde queremos fazer a exclusão, especificar o critério de exclusão através do método where
e por fim chamar o método del
, que fará a exclusão.
banco("clientes").where("id",1).del()//Deleta o elemento onde o id é igual a 1
banco("clientes").where({sobrenome:"Silva"}).del() //Deleta todos os elementos que possuirem o sobrenome Silva
banco("clientes").whereBetween("id",[10,20]).del() //Deleta os elementos que possuirem o id no intervalo de 10 e 20
Atualizar dados da tabela
A sintaxe de atualização dos dados da tabela, assim como a de exclusão, requer o uso do método where
. O método update
, utilizado para fazer a atualização, irá receber como parâmetro um objeto com os dados que devem ser atualizados. Supondo que o objeto {nome:”Carmen”, sobrenome:”Silva”}
tenha sido inserido no banco com o id 8, podemos fazer atualizações nesse registro com o código abaixo:
knex('clientes')
.where("id",8)
.update({
sobrenome: "Almeida"
})
Os campos presentes no objeto passado para a função update
serão persistidos no banco de dados, enquanto os dados faltantes não serão alterados.
Considerações finais
Neste artigo vimos a utilização básica de alguns comandos no Knex para realizar operações de criação, atualização, leitura e exclusão em um banco de dados. O Knex também pode ser utilizado para a realização de operações mais complexas envolvendo os bancos de dados relacionais, e uma vez que você tenha domínio sobre os conceitos do SQL, com certeza pose tirar muito proveito desse tipo de ferramenta.