Blog Formação DEV

Introdução ao Knex

Escrever consultas SQL em uma aplicação pode acabar sendo algo bem trabalhoso, por isso neste artigo te apresento o Knex, uma ferramenta que tornará a escrita de consultas SQL muito mais simples.
Introdução ao Knex
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.

Sobre o autor
Cod3r

Cod3r

Com mais de 400 mil alunos, a Cod3r é uma das principais escolas de tecnologia do País. Um de seus produtos mais importantes é a Formação DEV, com objetivo de preparar os profissionais para o mercado.

Ótimo! Inscreveu-se com sucesso.

Bem-vindo de volta! Registou-se com sucesso.

Assinou com sucesso o Blog Formação DEV .

Sucesso! Verifique o seu e-mail para obter o link mágico para se inscrever.

As suas informações de pagamento foram atualizadas.

Seu pagamento não foi atualizado.