MySQL

Criando um instalador para distribuir suas aplicações Windows

No meu artigo passado, onde expliquei como criar um executável para uma aplicação Java, falei das dificuldades de criação de um instalador que um dos nossos alunos comentou. Então dando continuidade a este tema, neste artigo expliquei como criar o instalador em si.

Neste ponto é importante que já tenha gerado o executável da aplicação. Você pode ver como realizar este procedimento no meu artigo passado.

Java - Fundamentos de JavaFx
Curso de Java - Fundamentos de JavaFx
CONHEÇA O CURSO

Inno Setup

Existem várias aplicações que possibilitam a criação de um instalador para o Windows. Para este artigo irei utilizar o Inno Setup, por se tratar de uma aplicação clássica, que possui muito material informativo e é gratuita.

Você pode efetuar o download desta ferramenta no site: http://www.jrsoftware.org/isinfo.php

Só que antes de vê-la é necessário verificarmos se possuímos todas as dependências da aplicação. Como neste artigo irei utilizar a aplicação abordada no artigo passado, sei que ela utiliza o MySQL como banco de dados, então será necessário configurá-lo durante a instalação da aplicação. E a aplicação também necessita do JRE, então ele precisa ser empacotado junto do executável.

Aqui cabe um parênteses, o MySQL não é o banco de dados ideal para uma aplicação destkop simples, como a deste artigo. Por causa deste banco, a aplicação irá ocupar muito espaço em disco, irá demorar para ser instalada e terá a dependência de um serviço que precisa ficar ativo.

Um banco de dados mais apropriado para esta situação seria o SQLite, que é mais leve e mais fácil de ser configurado.

De qualquer forma, vamos ver como configurar o MySQL durante a instalação da aplicação.

Configurando a instalação do banco de dados

Para configurar o banco de dados utilizarei um arquivo batch e a versão noinstall do MySQL Community Server. Esta versão é o arquivo zip disponibilizado no site do banco. Com isso, não haverá necessidade de iniciar um instalador.

Após efetuar o download da versão compactada do banco, é necessário extrai-lo. Entre os arquivos extraídos pode-se remover os arquivos com extensão *.pdb. Os arquivos com esta extensão são utilizados para depuração e a nossa aplicação não necessitará deste recurso.

Ao realizar este procedimento se reduz o tamanho da pasta do banco.

Agora é necessário configurá-lo via um arquivo batch. Com isso, poderemos indicar para o Inno Setup que este arquivo deve ser executado durante a instalação da aplicação e removido ao final dela. Desta forma, o banco será configurado e instalado em paralelo com a aplicação e o usuário não notará.

O nosso foco aqui não é como funciona o processo de configuração do MySQL via linha de comando, que é o recurso que utilizaremos para configurá-lo por um arquivo batch. Você pode ver como realizar esta configuração na documentação do banco.

Seguindo a documentação, o arquivo batch da aplicação ficará com o conteúdo abaixo:

@echo off

echo Criando a pasta data, utilizadas pelo MySQL

set mypath=%cd%

set mysqlpath=%mypath%\..\mysql

if not exist "%mysqlpath%\data" mkdir "%mysqlpath%\data"

echo Inicializando o MySQL. Criando o conteúdo da pasta data

"%mysqlpath%/bin/mysqld.exe" --initialize-insecure --user=mysql --basedir="%mysqlpath%" --datadir="%mysqlpath%\data"

echo Definindo o MySQL como um serviço

"%mysqlpath%\bin\mysqld.exe" --install MySQL

echo Iniciando o serviço criado

sc start MySQL

echo Verificando se o serviço esta ativo

:INITDATA
sc query "MySQL" | find "RUNNING"
if "%ERRORLEVEL%"=="0" (
    echo Serviço ativo ...

    echo Configurando a base de dados...

    echo Definindo uma senha para o usuário root...

    "%mysqlpath%\bin\mysql.exe" -uroot --skip-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'iTagAfrH5ej';"

    echo Criando o usuário utilizado pela aplicação e atribuindo as permissões dele

    "%mysqlpath%\bin\mysql.exe" -uroot -piTagAfrH5ej -e "CREATE USER 'appjavafx'@'localhost' IDENTIFIED BY 'app1java2fx3';GRANT CREATE, SELECT, INSERT, UPDATE, DELETE ON *.* TO 'appjavafx'@'localhost';FLUSH PRIVILEGES;"

    echo Criando o banco de dados da aplicação

    "%mysqlpath%\bin\mysql.exe" -uappjavafx -papp1java2fx3 -e "CREATE DATABASE appjavafx;"

    echo Criando a tabela utilizada pela a aplicação

    "%mysqlpath%\bin\mysql.exe" -uappjavafx -papp1java2fx3 -e "CREATE TABLE appjavafx.contatos (id INT NOT NULL AUTO_INCREMENT, nome VARCHAR(256) NOT NULL, idade MEDIUMINT NOT NULL, telefone CHAR(15) NOT NULL, PRIMARY KEY (id));"

) else (
    echo Serviço ainda não iniciado, aguardando 5 segundos
    ping 127.0.0.1 -n 6 > nul
    goto INITDATA
)

Note que é exibida uma mensagem indicando o que cada comando faz. Mas é bom frisar as linhas iniciais:

set mypath=%cd%

set mysqlpath=%mypath%\..\mysql

Nelas são obtidas a pasta atual (a pasta onde a aplicação foi instalada) e a pasta do MySQL. Isso será necessário para executar os demais comandos do arquivo.

Com este arquivo definido e o banco de dados baixado, podemos configurar o instalador no Inno Setup.

Criando o instalador no Inno Setup

Após configurar o instalador da Inno Setup, ao iniciá-lo será apresentada a tela abaixo:

Como é possível notar, o Inno Setup gera o instalador com base nas configurações definidas em um script. Esta ferramenta possui uma grande gama de opções, que não irei abordar em detalhes aqui. O foco serão os recursos utilizados para criar o instalador da aplicação deste artigo.

Nesta primeira tela, optei pela opção “Create a new script file using the Script Wizard“. Com isso será exibido um assistente que irá facilitar a criação do script:

Neste assistente a tela mais importante é onde é indicado o executável e as suas dependências:

Pois caso alguma dependência não seja selecionada, a aplicação pode não funcionar corretamente. Ao final do assistente será criado um script parecido com o abaixo:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "AppJavaFX"
#define MyAppVersion "1.0"
#define MyAppPublisher "Treinaweb Cursos"
#define MyAppURL "https://www.example.com.br/"
#define MyAppExeName "AppJavaFx.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{0CFD790F-D36E-4569-A5CD-D97CB6B6732D}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={autopf}\{#MyAppName}
DisableProgramGroupPage=yes
PrivilegesRequired=admin
OutputBaseFilename=AppSetup
Compression=lzma
SolidCompression=yes
WizardStyle=modern

[Languages]
Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Curso\Java\AppJavaFx.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Curso\Java\installmysql.bat"; DestDir: "{app}/bin"; Flags: ignoreversion deleteafterinstall
Source: "C:\Users\trein\Downloads\mysql-8.0.18-winx64\*"; DestDir: "{app}/mysql"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "C:\Curso\Java\java-runtime\*"; DestDir: "{app}/java-runtime"; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\bin\installmysql.bat"; Parameters: "install"; Flags: runascurrentuser runhidden
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

[UninstallDelete]
Type: filesandordirs; Name: "{app}/mysql/data"

Algumas configurações que o assistente não define adicionei diretamente no script, como a indicação que o arquivo batch deve ser executado em durante a instalação:

[Run]
Filename: "{app}\bin\installmysql.bat"; Parameters: "install"; Flags: runascurrentuser runhidden

Também indiquei que este arquivo deve ser excluído ao final do processo:

Source: "C:\Curso\Java\installmysql.bat"; DestDir: "{app}/bin"; Flags: ignoreversion deleteafterinstall

Como ele contém informações sensíveis (as senhas dos usuários do banco), não pode ficar na pasta da aplicação.

Para gerar o executável, selecione a opção Build > Compiler (Ctrl+F9) ou Run (F6). Caso opte pela opção Run, o instalador será iniciado após a sua criação.

Windows - Fundamentos para desenvolvedores
Curso de Windows - Fundamentos para desenvolvedores
CONHEÇA O CURSO

Iniciando o instalador

Com o instalador gerado é importante executá-lo para verificar se foi criado corretamente. Ele pode ser executado no computador atual, onde exibirá o assistente:

Podemos seguí-lo, que ao final é perguntando se a aplicação deve ser iniciada:

Caso a aplicação seja iniciada sem nenhum erro é porque o instalador foi criado corretamente.

Também é possível verificar na pasta da aplicação quais foram os arquivos criados:

Com tudo certo, a aplicação pode ser distribuída para outros usuários.

Fico por aqui, até o próximo artigo.

Principais aplicações para gerenciamento de banco de dados com interface gráfica

Normalmente, para o gerenciamento de banco de dados, utilizamos o terminal para realizar tarefas rotineiras. Mas há quem prefira utilizar ferramentas com interface gráfica para gerenciar estas aplicações.

Projeto de Banco de dados - Fundamentos
Curso de Projeto de Banco de dados - Fundamentos
CONHEÇA O CURSO

Neste artigo veremos algumas destas ferramentas e algumas de suas principais características.

MySQL Workbench

Aqui no blog temos um artigo sobre os primeiros passos com o MySQL, e nele ensinamos a realizar o download da ferramenta.

Ao baixar o MySQL, a ferramenta Workbench virá integrada para utilização.

É uma ferramenta visual de design de banco de dados, que integra desenvolvimento, design, criação e manutenção de SQL em um único ambiente de desenvolvimento. Multiplataforma e desenvolvido pelo Oracle, o MySQL Workbench possui a licença GNU (General Public License) e é uma excelente opção para substituir o terminal.

Dentre suas principais vantagens podemos listar:

  • Gratuita;
  • Como dissemos acima, multiplataforma;
  • Excelente documentação;
  • Conexão direta com o banco de dados;
  • Possui uma alta curva de aprendizado e muitas outras vantagens.

phpMyAdmin

De código aberto e multiplataforma, o phpMyAdmin é uma outra opção para gerenciar banco de dados MySQL através de navegadores de maneira simples e intuitiva. Desenvolvido em PHP, é possível criar, remover e alterar tabelas, manipular campos de chaves, e muito mais.

É muito utilizado por desenvolvedores que utilizam o PHP e o MySQL para o desenvolvimento de aplicações web, mas possui algumas outras vantagens, como:

  • Administra banco de dados através de uma interface web;
  • Suporte para funções do MySQL;
  • Carrega arquivos de texto em tabelas;
  • Possui interface web amigável;
  • Possui mais de 50 idiomas disponíveis;
  • Transforma dados armazenados em qualquer formato usando funções predefinidas, entre outros.

Para realizar seu download, basta acessar o seu site. Nele o usuário encontrará também links para o suporte, novidades, contribuição com o projeto, etc.

TablePlus

O TablePlus é um gerenciador de banco de dados relacional como: MySQL, PostgreSQL, SQLite, entre outros. Moderno, nativo e extremamente amigável, está disponível para os sistemas operacionais Mac e Windows.

Como vantagem, podemos citar:

  • Possui suporte para autenticação em várias etapas;
  • Possui TLS para criptografar sua conexão;
  • Aparência personalizável;
  • Cliente GUI intuitivo;
  • Edição em linha;
  • Revisor de código ;
  • Facilidade na importação e exportação do SQL;
  • Múltiplas guias e janelas, entre outros.

Para realizar seu download, basta acessar o seu site, onde é possível encontrar todas as características da ferramenta.

HeidiSQL

Desenvolvido em Delphi e lançado em 2002, o HeidiSQL é um programa livre e de código aberto para os seguintes banco de dados: MySQL, MariaDB, Microsoft SQL e PostegreSQL.

Possui o objetivo de ser de fácil aprendizagem e seu download pode ser realizado acessando o seu site, onde também encontramos sua documentação, forúm, suporte e muito mais.

Dentre suas principais características, podemos destacar:

  • Suporte para configurações SSL;
  • Sugere senhas aleatórias para seu gerenciador de usuários;
  • Suporte para chaves primárias binárias;
  • Interface amigável;
  • Altamente personalizado;
  • Conexão com múltiplos servidores de banco de dados, entre outros.

Sequel Pro

Disponível apenas para o sistema operacional MAC OS X, o Sequel Pro é um excelente aplicativo de gerenciamento de banco de dados muito rápido e fácil para trabalhar com banco de dados MySQL, fornecendo acesso direto em seus servidores locais ou remotos.

Dentre suas características e vantagens, podemos citar:

  • Possui uma fácil visualização dos dados;
  • Executa queries facilmente;
  • Fácil gerenciamento de usuários;
  • Código aberto, entre outros.

Em seu site é possível realizar seu donwload, encontrar toda sua documentação, novidades, comunidade e muito mais.

Para finalizarmos…

Gerenciar um banco de dados é sempre uma tarefa complicada, por isso, precisamos utilizar as ferramentas adequadas para nos auxiliar neste processo. Neste artigo vimos algumas das principais ferramentas para auxiliar no gerenciamento de bancos de dados e suas principais características.

Os principais SGBDs relacionais

Data Base Management System ou Sistema de Gerenciamento de Banco de Dados (SGBD) são um conjunto de software utilizados para o gerenciamento de uma base de dados, tendo como principal objetivo gerenciar as bases de dados utilizadas por aplicações clientes e remover esta responsabilidade das mesmas.

São responsáveis por controlar, acessar, organizar e proteger as informações de uma aplicação.

Os tipos de SGBDs

Existem dois tipos de SDBDs: Os relacionais e os não-relacionais (NoSQL).

  • Relacionais – Os SGBDS relacionais são banco de dados que modelam os dados no formato de tabelas, que podem se relacionar entre si. Cada tabela pode possuir diversos atributos, com diversos tipos de dados.

  • Não-relacionais (NoSQL) – NoSQL (Not Only SQL) é o termo utilizado para banco de dados não relacionais de alto desempenho, onde geralmente não é utilizado o SQL como linguagem de consulta. Estes bancos utilizam diversos modelos de dados incluindo documentos, gráficos, chave-valor e colunares. São amplamente reconhecidos pela facilidade em seu desenvolvimento, desempenho escalável, alta disponibilidade e resiliência.

Aqui em nosso blog já possuímos um artigo sobre SQL vs NoSQL, onde você poderá ver maiores diferenças entre esses tipos de SGBDs.

Os principais SGBDs relacionais do mercado

MySQL

O MySQL é um sistema de gerenciamento de banco de dados que utiliza a linguagem SQL como interface. Lançado sobre a licença GPL, atualmente é mantida pela Oracle Corporation. É multiplataforma, ou seja, possui suporte para diferentes sistemas operacionais (Windows, Linux e Mac).

MySQL - Desenvolvedor
Curso de MySQL - Desenvolvedor
CONHEÇA O CURSO

É, sem dúvidas, o SGBD mais popular do mundo, tendo como clientes grandes empresas como: Google, PayPal, Cisco, Netflix, Uber, GitHub, entre outras.

Tem como principais vantagens:

  • É gratuito;
  • Open source;
  • Como já dissemos acima, é multiplataforma;
  • Possui uma comunidade ativa;
  • Pode ser utilizado em qualquer tipo de aplicação (das mais simples às mais robustas);
  • Facilidade de programação e aprendizado.

Para instalar, basta acessar o site e realizar o download.

Aqui no blog possuímos um artigo bem legal que aborda os primeiros passos com o MySQL que vale a pena conferir.

OracleDB

O mais utilizado em aplicações corporativas, o OracleDB é o SGBD comercializado pela Oracle Corporation, lançado em meados dos anos 70. É multiplataforma e possui licença comercial.

Oracle - Desenvolvedor
Curso de Oracle - Desenvolvedor
CONHEÇA O CURSO

O download pode ser feito acessando o site, onde também encontramos toda sua documentação e suporte.

Como vantagens do Oracle, podemos citar:

  • Padronização e consistência entre as diferentes versões do Oracle SQL;
  • Compartilhamento de recursos;
  • Flexibilidade de gerenciamento e contenção de custos;
  • Estabilidade;
  • Suporte, entre outros.

SQLServer

Desenvolvido pela Microsoft, o Microsoft SQL Server é o Sistema de Gerenciamento de Banco de Dados desenvolvido para os sistemas operacionais Windows e Linux.

SQL Server - Desenvolvedor
Curso de SQL Server - Desenvolvedor
CONHEÇA O CURSO

Possui licença proprietária e é um SGBD que atende desde as demandas mais simples até as mais complexas. Dentre suas principais vantagens podemos listar:

  • Excelente suporte para recuperação de dados;
  • Inclui softwares de gestão de banco de dados tanto para nível profissional quanto empresarial;
  • Permite a criação de tabelas relacionadas;
  • Gerenciamento de buffers;
  • Permite que vários clientes usem o mesmo banco de dados simultaneamente;
  • Controle de simultaneidade otimista (permite que uma nova versão de uma linha seja criada sempre que a linha é atualizada em vez de sobrescrevê-la).

Em seu site é possível acessar toda sua documentação, comunidade e realizar o download.

MariaBD

Lançado em 2009, o MariaBD é um SGBD multiplataforma sobre a licença GNU GPL (Licença pública geral).

Surgiu tendo como base o MySQL, desenvolvido também pelo seu próprio fundador. Como vantagens, podemos citar:

  • Compatibilidade com o MySQL;
  • Segurança;
  • Velocidade;
  • Menor exigência do hardware;
  • Entrega atualizações de segurança constantemente;
  • É totalmente gratuito;
  • Faz replicação de dados entre servidores;
  • Apresenta menor quantidade de falhas e bugs;
  • Execução paralela de consultas, entre outros.

Seu download e documentação podem ser vistos acessando o seu site.

PostegreSQL

Open source, sob a licença BSD e multiplataforma, o PostegreSQL é um dos SGBDs mais avançados do mercado.

PostgreSQL - Desenvolvedor
Curso de PostgreSQL - Desenvolvedor
CONHEÇA O CURSO

Dentre suas principais vantagens, podemos citar:

  • Altamente escalável;
  • Possui uma comunidade ativa;
  • Suporte a diversas linguagens de programação;
  • Robusto;
  • Flexibilidade ao utilizar stored procedure;
  • Alta performance, entre outros.

O download poderá ser realizado acessando o seu site, onde você também encontrará toda documentação, comunidade, suporte, entre outros.

Afinal, qual SGBD utilizar em meu projeto?

Acima pudemos ver alguns dos SGBDs relacionais e algumas de suas características. Desta forma, seguem algumas dicas que podem te ajudar na hora de escolher qual SGBD utilizar em seu projeto:

  • Analisar as principais características de cada SGBD;
  • Conhecer o seu negócio e saber quais as necessidades que o SGBD deve suprir;
  • Se existem profissionais especialistas em um determinado SGBD que irão trabalhar no projeto;
  • Analisar os custos do projeto, entre outros.

Primeiros passos com MySQL

No artigo anterior vimos os principais comandos SQL (DQL, DDL e DML).

Neste artigo estaremos utilizando os comandos abordados no artigo anterior para criarmos o nosso primeiro banco de dados MySQL utilizando o terminal.

Entenda o que é SQL

SQL ou Structured Query Language (Linguagem de Consulta Estruturada) é uma linguagem padrão de gerenciamento de dados que interage com os principais bancos de dados baseados no modelo relacional. Alguns dos principais sistemas que utilizam SQL são: Oracle, PostgreSQL, Firebird, MySQL, entre outros.

Sendo assim, utilizando a linguagem SQL, os desenvolvedores podem ter uma comunicação com o banco de dados de maneira simples e ágil a partir dos seus comandos.

MySQL - Desenvolvedor
Curso de MySQL - Desenvolvedor
CONHEÇA O CURSO

Agora, você precisa entender o que é o MySQL

MySQL é um sistema de gerenciamento de banco de dados (SGBD) que utiliza a linguagem SQL como interface.

Lançado sobre a licença GPL, possui como desenvolvedor a Oracle Corporation. É multiplataforma, ou seja, possui suporte para diferentes sistemas operacionais (Windows, Linux e Mac).

É, sem dúvidas, o SGBD mais popular do mundo, tendo como clientes grandes empresas como: Google, PayPal, Cisco, NetFlix, Uber, GitHub, entre outras.

Vantagens do MySQL

O MySQL possui diversas vantagens, fazendo com que este seja um dos principais SGBDs do mercado. Dentre estas vantagens, podemos citar:

  • É gratuito;
  • Open source;
  • Como já dissemos acima, é multiplataforma;
  • Possui uma comunidade ativa;
  • Pode ser utilizado em qualquer tipo de aplicação (das mais simples às mais robustas);
  • Facilidade de programação e aprendizado.

Instalando o MySQL

Agora já estamos prontos para iniciarmos o nosso primeiro banco de dados.

O primeiro passo é baixarmos o MySQL em nossa máquina. Para isso, acessamos o site do MySQL e realizaremos o seu download.

Ao acessar o link acima, o site reconhecerá o sistema operacional que você está utilizando, te dando a opção do download para o mesmo. Como estou utilizando o Windows, estarei realizando os passos a partir deste sistema operacional, mas lembramos que os passos são basicamente os mesmos para qualquer SO que você esteja utilizando.

A sua instalação segue o padrão das demais “Next”, se atentando apenas a alguns passos durante a mesma, como: Aceitar os termos de uso, informar o tipo de instalação, método de autenticação, criar sua senha do Root, aplicar as configurações e “Finish”. O banco de dados estará pronto para o uso! 🙂

Após a instalação, vamos começar?

Agora, abriremos seu CLI (Interface de linha de comando).

Logo de início, será necessário digitar a senha root definida no passo anterior (de instalação).

Pronto!

Após inserirmos a senha, nosso CLI estará pronto para utilizarmos os comandos SQL para criarmos o nosso banco de dados.

Desta forma, digitamos o seguinte comando:

CREATE DATABASE nome_do_banco;

Após criar o banco de dados, precisamos informar ao MySQL que este será utilizado. Para isso utilizamos o seguinte comando:

USE nome_do_banco;

Pronto!

Já criamos o nosso banco de dados e agora já estaremos prontos para o utilizarmos na criação da nossa primeira tabela.

Para isso, usaremos o comando abaixo:

CREATE TABLE usuario (id INT, nome VARCHAR (255), PRIMARY KEY(id));

Esta tabela terá dois campos, conforme podemos visualizar acima, que será o ID do usuário e seu nome.

Para que cada registro possua um identificador único no banco de dados, precisamos determinar que o ID da tabela usuário será uma PRIMARY KEY. Desta forma, não haverão usuários cadastrado no banco de dados com o mesmo ID.

Possuímos diversos tipos de dados no SQL, e eles podem ser:

  • Dados Strings: char, varchar, text, entre outros;
  • Dados numéricos: bit, smallint, int, float, entre outros;
  • Dados data: datetime, date, time, year, entre outros.

Neste exemplo utilizamos o INT, onde não é necessário declarar seu tamanho, já que o mesmo possui o tamanho fixo de 4 bytes e o VARCHAR de 255 caracteres.

Depois da criação da tabela, podemos inserir dados. Para isso utilizamos o comando abaixo:

INSERT INTO usuario (id, nome) VALUES (1, ‘Maria’);

Este comando irá inserir o registro com id = 1 e o nome = ‘Maria’. Perceba que dados do tipo VARCHAR, como o nome da tabela usuario, deverá ser inserido com uso de aspas simples.

  • Lembrando que podemos criar quantos usuários quisermos utilizando o comando descrito acima, conforme podemos ver na imagem abaixo:

Após inserirmos os usuários na tabela, utilizamos o comando SELECT para listar os usuários do banco de dados.

Para isso, executamos o seguinte comando:

SELECT * FROM usuario;

O asterisco * representa que serão listados todos os dados pertencentes a esta tabela. Já o FROM será referente ao nome da tabela que os dados serão buscados.

Após utilizarmos o comando SELECT para trazer todos os usuários existentes na tabela, utilizaremos o comando UPDATE para alterarmos, por exemplo, o nome de um dos nossos usuários.

Desta forma, utilizaremos o seguinte comando:

UPDATE usuario SET nome = ‘Maria Silva’ WHERE id =1;

Ou seja, estaremos inserindo o sobrenome Silva ao nome Maria. O comando SET quer dizer justamente isso, “setar” o sobrenome ao usuário de id=1. É necessário inserirmos o “WHERE id=1”, pois haverá alteração somente no usuário de “Maria”.

Após utilizarmos o comando UPDATE acima, usaremos o comando DELETE para deletar um dos usuários da tabela. Desta forma, o comando utilizado será:

DELETE FROM usuario WHERE id =3;

Com isso, estaremos excluindo o usuário de id=3 que corresponde ao usuário de nome “Pedro”.

No comando a seguir, estaremos inserindo uma nova tabela em nosso banco de dados, e dessa vez, o comando responsável por essa alteração será o ALTER TABLE:

ALTER TABLE usuario ADD idade INT AFTER nome;

Ou seja, estaremos alterando a tabela de usuário, adicionando (ADD) o registro “idade” de dado inteiro (INT) após o registro nome.

Conforme podemos observar na imagem abaixo, os dados serão apresentados como NULL (nulo) até inserirmos novos dados a este registro.

Desta forma, podemos utilizar o comando abaixo para inserir as idades correspondentes aos nossos usuários:

UPDATE usuario SET idade = 50 WHERE id = 1;

Um outro comando muito utilizado é o DROP, responsável por remover tabelas do banco de dados ou o próprio banco de dados, como podemos ver abaixo.

Principais comandos SQL

Neste primeiro artigo abordaremos os principais comandos do SQL: DQL, DLL e DML.

Mas afinal, você sabe o que é SQL?

SQL ou Structured Query Language (Linguagem de Consulta Estruturada) é uma linguagem padrão de gerenciamento de dados que interage com os principais bancos de dados baseados no modelo relacional. Alguns dos principais sistemas que utilizam SQL são: Oracle, PostgreSQL, Firebird, MySQL, entre outros.

Sendo assim, utilizando a linguagem SQL, os desenvolvedores podem ter uma comunicação com o banco de dados de maneira simples e ágil a partir dos seus comandos.

MySQL - Desenvolvedor
Curso de MySQL - Desenvolvedor
CONHEÇA O CURSO

DQL, DDL e DML

DQL, DDL e DML são consideradas subconjuntos da linguagem SQL.

Estes comandos são os que permitem a escrita de códigos que irão criar novas estruturas como tabelas, índices, visões, entre outros, permitindo que dados sejam inseridos ou modificados para consultas posteriores.

Linguagem de Consulta de Dados

DQL ou Data Query Language possui apenas um único comando: O SELECT.

O SELECT é um dos principais comandos utilizados em SQL, pois com ele é possível realizar consultas aos dados que pertencem a uma determinada tabela. É um comando composto de várias opções que permite a elaboração de consultas das mais simples a mais elaboradas.

Um exemplo que podemos fornecer a cerca do uso do SELECT é quando possuímos em nosso banco de dados vários usuários e precisamos listar todos eles de uma só vez. Desta forma utilizaremos o seguinte comando:

SELECT * FROM usuarios;

Ao ser executado, o comando acima irá retornar todos os usuários armazenados no banco de dados.

Linguagem de Definição de dados

DDL ou Data Definition Language (Linguagem de Definição de dados) permite ao usuário definir as novas tabelas e os elementos que serão associados a elas. É responsável pelos comandos de criação e alteração no banco de dados, sendo composto por três comandos: CREATE, ALTER e DROP.

O comando CREATE DATABASE é responsável pela criação de um novo banco de dados vazio, conforme podemos ver abaixo:

CREATE DATABASE banco_teste;

Ao ser executado, estaremos criando o banco de dados chamado “banco_teste”.

Já o comando CREATE TABLE irá criar uma nova tabela. Os bancos de dados relacionais guardam seu dados dentro de tabelas que são divididas em colunas. Desta forma, veremos abaixo a criação de uma tabela de usuário. Ao criar, especificaremos as suas colunas e quais tipos de dados elas irão receber (neste caso, um ID e o nome do usuário).

CREATE TABLE usuario (id INT, nome VARCHAR (255));

O comando ALTER, por sua vez, é o comando utilizado para alterar uma tabela ou um banco de dados já existente.

No exemplo abaixo estaremos adicionando uma nova coluna a nossa tabela de usuário criada acima. Esta nova coluna “idade” será criada após a nossa coluna “nome”, desta forma, usaremos:

ALTER TABLE usuario ADD idade INT AFTER nome;

O comando DROP é utilizado para remoção de uma tabela ou do banco de dados por completo. Desta forma para remover um banco de dados por completo, basta inserirmos o seguinte comando:

DROP DATABASE banco_teste;

Ou excluir uma tabela utilizando o seguinte comando:

DROP TABLE usuario;

Linguagem de Manipulação de Dados

O DML ou Data Manipulation Language (Linguagem de Manipulação de Dados) interage diretamente com os dados dentro das tabelas. Possui três comandos para esta manipulação: INSERT, UPDATE e DELETE.

Estas instruções são utilizadas nas consultas e modificações dos dados que estarão armazenados dentro do banco de dados. No comando INSERT estaremos inserindo dados a uma ou mais tabela de um banco de dados. Desta forma, abaixo veremos a sua sintaxe:

INSERT INTO usuario (id, nome, idade) VALUES (1, 'Maria', 50);

O comando acima irá criar o usuário Maria, com idade de 50 anos e ID 1.

O UPDATE é utilizado para atualizar os dados de uma ou mais tabelas.

UPDATE usuario SET nome = 'Maria Silva' WHERE id = 1;

Ao executar o comando acima, estaremos alterando o nome do usuário que possui o ID 1 para “Maria Silva”.

Já o comando DELETE, como seu próprio significado já diz, utilizaremos para excluir os dados de uma ou mais tabela em nosso banco de dados.

DELETE FROM usuario WHERE id = 1

Desta forma, ao executar o comando acima, estaremos excluindo o usuário que possui o ID 1 do nosso banco de dados.

Concluindo

Neste artigo vimos os principais comandos para criação de tabelas e bases de dados, inserção, remoção e edição de registros, além da criação de consultas.

No próximo artigo veremos como colocar em prática estes comandos e criar nosso primeiro banco de dados.

MySQL - Desenvolvedor
Curso de MySQL - Desenvolvedor
CONHEÇA O CURSO

Utilizando Choices no Django ORM

Na construção de um formulário, há casos em que precisamos de um campo para armazenar determinadas opções para um atributo. Um exemplo claro deste caso é o armazenamento do sexo de um usuário, que só deve permitir uma determinada lista de opções (masculino, feminino, outro).
Para estes casos, o Django ORM permite que criemos uma lista com as possíveis opções que deverão ser selecionadas, evitando que o usuário possa digitar qualquer valor naquele campo.
Sendo assim, neste artigo veremos como trabalhar com choices no Django ORM.

Criando choices no models.py

Para criar uma lista de possíveis opções no Django ORM, precisamos definir quais serão estas opções e a qual chave ela pertence. Por exemplo, se quisermos criar uma lista de opções para o campo sexo, determinamos o seguinte conteúdo no arquivo models.py do nosso projeto:

class Cliente(models.Model):
    SEXO_CHOICES = (
        ("F", "Feminino"),
        ("M", "Masculino"),
        ("N", "Nenhuma das opções")
    )

    nome = models.CharField(max_length=100, null=False, blank=False)
    sexo = models.CharField(max_length=1, choices=SEXO_CHOICES, blank=False, null=False)
    data_nascimento = models.DateField(null=False, blank=False)
    email = models.EmailField(null=False, blank=False)


    def __str__(self):
        return self.nome
Django - Banco de dados com Django ORM - Parte 1
Curso de Django - Banco de dados com Django ORM - Parte 1
CONHEÇA O CURSO

Note que precisamos criar a variável SEXO_CHOICES e determinar quais as opções que um sexo poderá exercer. Depois disso, criamos o campo sexo em nosso model e determinamos que as opções disponíveis para este campo estão definidas na variável SEXO_CHOICES. Com isso, sempre que o formulário para cadastro (ou edição) de um cliente for submetido, o Django irá verificar se uma das opções foi selecionada. Caso positivo, libera a requisição, caso negativo, alerta ao usuário que apenas estas opções são permitidas a serem selecionadas.

Um outro ponto positivo para o uso do choices é que só precisamos armazenar a chave que irá identificar cada sexo, assim, economizamos um certo espaço no banco de dados, já que só será necessário armazenar um caractere (F, M ou N), não o nome do sexo (Feminino, Masculino ou Nenhuma das opções).

Personalizando a chave primária no Django ORM

Por padrão, o ORM do Django cria, para cada tabela, um campo chamado id e é ele quem identifica, unicamente, os registros no banco de dados. Porém, muitas vezes, precisamos que este campo possua outro nome (ou até outro tipo)… E é isso que veremos neste artigo.

Django - Banco de dados com Django ORM - Parte 1
Curso de Django - Banco de dados com Django ORM - Parte 1
CONHEÇA O CURSO

Alterando nome e tipo da chave primária no Django ORM

Como exemplo para este artigo, vamos utilizar um model simples, com apenas alguns campos, conforme podemos ver abaixo:

class Pessoa(models.Model):
    nome = models.CharField(max_length=40, null=False, blank=False)
    email = models.EmailField(null=False, blank=False)

    def __str__(self):
        return self.nome

Ao realizar a migração, a seguinte estrutura será criada no banco de dados:

Podemos notar que, apesar de não definir nenhum campo com o nome id, o Django o criou automaticamente. Por padrão, este campo é do tipo int(11), não permite dados nulos e é utilizado para armazenar a chave primária da tabela. Porém, caso necessário, podemos alterar a estrutura deste campo facilmente utilizando o Django.

Para isso, a única coisa que precisamos fazer é criar um campo que será utilizado como primary_key no model do nosso projeto, como podemos ver abaixo:

class Pessoa(models.Model):
    id_personalizado = models.CharField(max_length=20, primary_key=True)
    nome = models.CharField(max_length=40, null=False, blank=False)
    email = models.EmailField(null=False, blank=False)

    def __str__(self):
        return self.nome

Sendo assim, podemos notar que a única coisa necessária para alterar a chave primária de uma tabela é determinar o atributo primary_key=True e, com isso, este campo será utilizado como chave primária no banco de dados:

Concluindo

Apesar de possuir diversas configurações padrões, o ORM do Django permite a personalização de várias delas. Neste artigo vimos o quão simples é alterar o nome da chave primária de um determinado model.

Criando um ambiente de desenvolvimento PHP com WSL

O WSL é uma alternativa interessante para quem precisa configurar um ambiente de desenvolvimento em Linux dentro do Windows. Com ele você pode escolher a sua distribuição Linux preferida e configurar seu ambiente exatamente da mesma forma que você configuraria em uma máquina Linux ou em um servidor, por exemplo.

Nesse artigo vamos criar um ambiente de desenvolvimento PHP completo, com MySQL e Nginx dentro do WSL.

Instalação do WSL

Antes de mais nada, é preciso habilitar o WSL na sua máquina e instalar a distribuição de sua escolha. Se você ainda não conhece o WSL ou tem dúvidas se sua máquina tem suporte a ele, recomendo a leitura do artigo O que é Windows Subsystem for Linux (WSL)? para saber mais e acompanhar o processo de instalação.

Para esse tutorial vou utilizar o Ubuntu 18.04. Os comandos apresentados aqui podem não funcionar com outras distribuições, mas você pode utilizar esse artigo para ter uma ideia geral.

Instalando o Nginx

Para iniciar vamos iniciar nosso terminal com o WSL e instalar o Nginx. Ele está disponível via apt-get e pode ser instalado com os comandos abaixo como sudo:

sudo apt-get update
sudo apt-get install nginx

Aproveite esse momento e instale utilitários como o git para versionamento de código e um editor de textos de sua preferência, como o vim:

sudo apt-get install git vim

Depois é necessário habilitar o serviço do Nginx dentro do WSL, antes disso verifique se a porta 80 da sua máquina está liberada. Você pode executar o seguinte comando PowerShell como administrador para descobrir isso:

Get-Process -Id (Get-NetTCPConnection -LocalPort 80).OwningProcess

Se o comando retornar erro, a porta 80 está liberada para uso:

Verificando a porta 80 com PowerShell

Feito isso, volte para seu terminal do WSL e execute o comando:

sudo service nginx start

Com isso seu localhost já estará funcionando:

Página inicial do nginx

Como o WSL não suporta o gerenciamento de serviços usando systemd, sempre que você reiniciar a máquina e iniciar uma nova sessão com o WSL, você precisa iniciar o serviço do Nginx novamente. Veremos como resolver isso logo mais.

Instalando o MySQL

O MySQL 5.7 pode ser instalado a partir do apt-get no Ubuntu 18.04:

sudo apt-get install mysql-server

Como também aconteceu com o Nginx, é preciso iniciar o serviço do MySQL manualmente:

sudo service mysql start

Para acessar sua instância do MySQL, é preciso criar um novo usuário no seu banco de dados para ser utilizado junto com sua aplicação. No seu terminal inicie o cliente do MySQL executando sudo mysql e execute a seguinte query:

GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Isso irá criar um usuário chamado admin com a senha password. Esse usuário será acessível apenas pelo endereço localhost. Troque o usuário e senha para algo mais seguro e digite exit para sair do cliente do MySQL.

Teste a conexão com o MySQL utilizando algum cliente, você pode utilizar o MySQL Workbench por exemplo:

Teste da conexão com o MySQL

Instalando o PHP

Agora vamos de fato instalar o PHP e configurá-lo para funcionar com o Nginx. É preciso instalar o PHP-FPM (FastCGI Process Manager) para que o Nginx consiga delegar as requisições recebidas para as páginas a serem interpretadas com PHP. Como estamos utilizando o MySQL como banco de dados, é interessante instalar a extensão do MySQL também:

sudo apt-get install php-fpm php-mysql

Com isso será instalado a versão 7.2 do PHP juntamente com o FPM e as extensões do MySQL:

Versão do php

Depois de instalado, inicie o serviço do PHP-FPM:

sudo service php7.2-fpm start

Configurando nosso site

Por fim, vamos configurar nosso site para ser executado com PHP. Crie um arquivo em /etc/nginx/sites-available/localhost com o seguinte conteúdo:

server {
  listen 80;
  root /var/www/html;
  index index.php index.html index.htm index.nginx-debian.html;
  server_name localhost;

  location / {
    try_files $uri $uri/ =404;
  }

  location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
  }

  location ~ /\.ht {
    deny all;
  }
}

Habilite o site criado para utilizar a nova configuração através de um link simbólico (conhecido também como symlink) no diretório /etc/nginx/sites-enabled e remova a configuração de site padrão com os seguintes comandos:

sudo ln -s /etc/nginx/sites-available/localhost /etc/nginx/sites-enabled/
sudo unlink /etc/nginx/sites-enabled/default

Reinicie o serviço do Nginx para ler essas novas configurações:

sudo service nginx restart

E crie o arquivo /var/www/html/index.php com o seguinte conteúdo:

<?php 
phpinfo();

No meu caso, eu precisei alterar o dono do diretório /var/www/html para poder criar esse arquivo:

sudo chown -R $USER: /var/www/html

Com isso, você deve conseguir ver a configuração do PHP no seu navegador:

Configurações do php

Configurando os serviços para iniciarem automaticamente

Devido a algumas limitações na arquitetura do WSL, não é possível iniciar serviços automaticamente pelo systemd. Para contornar isso podemos iniciar esses serviços a partir do nosso arquivo .bashrc e desabilitar a necessidade de perguntar a senha do sudo para esses serviços.

Lembrando que essa prática não é recomendada em ambientes de produção. Em produção utilize o systemd e nunca permita que serviços que precisam de permissões elevadas rodem sem precisar inserir uma senha.

Adicione as seguintes linhas no seu arquivo /etc/sudoers:

%sudo ALL=NOPASSWD: /etc/init.d/mysql
%sudo ALL=NOPASSWD: /etc/init.d/nginx
%sudo ALL=NOPASSWD: /etc/init.d/php7.2-fpm

E no seu arquivo do ~/.bashrc inclua o seguinte:

sudo /etc/init.d/nginx start
sudo /etc/init.d/mysql start
sudo /etc/init.d/php7.2-fpm start

Com isso, sempre que iniciar seu terminal do WSL os serviços serão iniciados automaticamente. Caso esteja utilizando alguma linguagem diferente, a ideia é a mesma: inclua os serviços necessário no .bashrc e desabilite a senha para esses serviços no /etc/sudoers.

Configurando sua IDE

Após tudo configurado, chegou a hora de configurarmos nossa IDE para utilizar o WSL. Da forma que configuramos nosso ambiente, os scripts PHP estão dentro da estrutura de arquivos do WSL.

Como o WSL não suporta ferramentas com interface gráfica, não podemos instalar nossa IDE.

Podemos resolver isso de algumas formas. Uma delas é salvar nossos arquivos nos diretórios do Windows e dentro do WSL configurar o Nginx para apontar para um diretório dentro de /mnt/c/. Esse diretório é mapeado diretamente com o C: do seu sistema e permite o WSL ter acesso a esses arquivos.

Caso você utilize o VS Code, uma melhor alternativa é utilizar os arquivos salvos diretamente dentro da estrutura do WSL. Existe uma extensão ainda em preview chamada Remote Development. Com ela é possível se conectar com sistemas externos através de SSH, Container ou WSL para trabalhar diretamente com o sistema de arquivos dessas soluções.

Para utilizar o Remote Development com o WSL, instale a extensão Remote – WSL no seu VS code e reinicie o mesmo.

Extensão Remote - WSL

Ao reiniciar, repare no canto esquerdo um novo ícone verde. A partir dele é possível abrir uma nova janela do VS Code com acesso ao sistema de arquivos da sua distribuição no WSL:

Nova janela com acesso ao WSL

Ao abrir essa nova janela, será instalado um agente dentro do WSL que permite a conexão com o VS Code. O ícone verde indicará o nome da sua distribuição que o VS Code está conectado. Ao abrir um diretório você navegará no sistema de arquivos do WSL.

Abra o diretório /var/www/html e podemos observar que nosso index.php está acessível:

Abrir diretório

Arquivos no WSL

Esse agente que é instalado no WSL permite uma melhor integração com o VS Code. Com ele é possível dentro do terminal do WSL abrir qualquer diretório que você esteja navegando utilizando o comando code . e também é possível instalar extensões do VS Code para executarem diretamente dentro do WSL, como por exemplo as extensões de intellisense e debug para PHP:

Extensões instalados no WSL

Para a extensão intellisense do PHP funcionar, é preciso que o executável do PHP esteja disponível no sistema. Instalando essa extensão dentro do WSL você consegue utilizar do executável já disponível no WSL, concentrando todas as funcionalidades necessárias para o seu ambiente em um único lugar.

Conclusão

Aprendemos nesse artigo como criar do zero um ambiente de desenvolvimento para PHP dentro do WSL. Esse ambiente pode ser uma alternativa para quem precisa executar um projeto em ambiente Linux dentro do Windows. Vimos também como configurar o VS Code para acessar diretamente os arquivos dentro do sistema de arquivos do WSL, tornando uma experiência muito próxima com a que teríamos com o Linux.

Criando APIs com o Strapi.io

O uso de APIs vem em constante crescimento nos últimos anos, e isso se deve a grande quantidade de aplicações clientes que precisam consumir dados de um mesmo banco de dados. Essas aplicações clientes vão desde aplicativos desktop até aplicações mobile, fazendo com que mais e mais serviços sejam criados diariamente.

Devido a esse cresimento, cada dia mais tecnologias surgem para auxiliar os desenvolvedores a criar estas APIs. Uma destas tecnologias é o Strapi.io e é sobre ela que vamos falar neste artigo.

Node.js Completo
Curso de Node.js Completo
CONHEÇA O CURSO

O que é o Strapi.io?

O Strap.io é uma ferramenta que visa facilitar a criação de serviços REST através de um painel administrativo totalmente funcional. Desenvolvido em node.js, o Strap.io é open-source e bem simples de se utilizar. Toda a sua documentação pode ser encontrada em sua página principal.

Instalando o Strapi.io

Para instalar o Strapi.io, precisamos apenas do node em nosso computador. Para isso, podemos baixar seu instalador na página oficial da ferramenta. O processo de instalação é bem simples e intuitivo, o famoso “next, next, finish”.

Após instalar o node, estamos aptos a instalar o strapi.io. Para isso, no Terminal (ou CMD, se você usa o Windows), digitamos o seguinte comando: npm install strapi@alpha -g. O comando vai baixar e instalar o strapi em seu SO e o retorno deve ser o seguinte:

Criando o projeto

Após instalar o Strapi.io, chegou a hora de criar nosso projeto. Para isso, abrimos o terminal e digitamos o seguinte comando: strapi new my-project. Este comando irá criar um projeto novo do strapi com o nome “my-project”.

Durante o processo de criação do projeto, precisamos selecionar qual banco de dados vamos utilizar (MySQL, Postgree ou MongoDB), o nome do BD, o Host, Porta de acesso para o BD, nome de usuário e senha do banco de dados selecionado, como mostra a imagem abaixo:

Feito isso, navegamos até seu diretório e executamos seu servidor com os comandos abaixo:

cd my-project
strapi start

Feito isso, seremos redirecionados para a página de registro de usuários do strapi, uma área administrativa com a seguinte URL: http://localhost:1337/admin/plugins/users-permissions/auth/register. Nela inserimos os dados de cadastro e clicamos no botão “Pronto para começar”, conforme visto na imagem abaixo:

Criando nossa API

Após configurar o usuário de acesso à área Administrativa, somos redirecionados para o dashboard do Strapi, onde temos acesso a todos os seus recursos. Agora, o primeiro passo é criar as tabelas do banco de dados que irão armazenar os dados da nossa aplicação. Para isso, clicamos no link “Construtor de conteúdo”. É lá que criamos as tabelas que vamos utilizar em nosso serviço REST:

Na próxima tela, selecionamos a opção “Adicionar Tipo de Conteúdo” e determinamos as configurações da tabela a ser criada:

Feito isso, clicamos no botão “Adicionar Novo Campo” e determinamos os campos que nossa tabela irá possuir, assim como seu tipo. O Strapi provê diversos tipos de campos, conforme visto abaixo:

Ao selecionar o tipo do campo, determinamos o nome do campo e clicamos em “continuar”. Vale lembrar que cada campo tem suas configurações particulares, então a tela abaixo pode variar conforme o tipo de dados que você está criando:

Após determinar todos os campos da tabela, clicamos no botão “Salvar” e a tabela será criada no banco de dados que configuramos anteriormente.

Com isso, estamos quase prontos para consumir nossa API. O último passo é configurar o nível de acesso e quem é permitido a consumir os recursos da API. Para isso, vamos até o menu “Papeis e Permissões” e selecionamos a permissão “Public”.

Observação: Esta permissão é responsável por configurar o acesso público da nossa API, ou seja, qualquer um que possuir a rota da nossa API, poderá consumir nosso serviço REST, então é muito importante que você reveja a necessidade do seu projeto antes de liberar a sua API para o público. Como estamos em um ambiente de desenvolvimento, não vamos nos atentar a isso.

Agora, na sessão “Permissões”, determinamos os métodos que os usuários que possuírem a permissão pública poderão efetuar em nossa tabela de clientes:

Vamos deixar todas as opções como ativas. E é isso, finalmente temos nosso serviço de manipulação de clientes ativo e funcionando, chegou a hora de testar!

JavaScript Avançado
Curso de JavaScript Avançado
CONHEÇA O CURSO

Testando nosso serviço

Agora podemos testar nossa API de clientes. Para isso, é só fazer uma requisição para a rota http://localhost:1337/clientes. Neste teste, vou utilizar o Postman, uma ferramenta para envio de requisições HTTP.

Sendo assim, enviando uma requisição POST para a rota mencionada acima e passando a idade e o nome no corpo da requisição, temos um novo cliente cadastrado, como podemos ver nas imagens abaixo:

Podemos também fazer todos os outros métodos básicos de um CRUD, como editar e remover um cliente do nosso banco de dados utilizando, respectivamente, os métodos PUT e DELETE:

Concluindo

Então é isso. Neste artigo vimos uma ótima ferramenta para criação de APIs de forma fácil, rápida e intuitiva. Vale ressaltar que esta ferramenta possui todos os métodos para controle de acesso e permissão e que tudo isso pode ser visto na sua documentação oficial

Protegendo suas aplicações Python de SQL Injection

Um dos maiores problemas que assombram os desenvolvedores de software é o SQL Injection. Essa técnica pode permitir que um código SQL seja executado através da aplicação cliente sem qualquer tipo de restrição e, assim, alterar os dados sem qualquer conhecimento dos administradores do sistema. Parece grave, certo? E, realmente, é. Sendo assim, neste artigo falaremos um pouco sobre o SQL Injection e como proteger aplicações Python deste tipo de ataque.

Python - Fundamentos
Curso de Python - Fundamentos
CONHEÇA O CURSO

O problema

Como dito anteriormente, o SQL Injection permite que código SQL seja executado através da aplicação cliente diretamente no banco de dados. Isso permite que hackers consigam alterar dados de forma irrestrita e sem consentimento dos administradores do sistema, o que é um problema muito grave em relação a segurança de um sistema. Para entender melhor este problema, vamos a um exemplo prático.

Imagine uma aplicação simples em que seja possível atualizar clientes passando seu nome e idade. Focando apenas no back-end da aplicação e sem qualquer tipo de verificação de SQL Injection, o código responsável por atualizar clientes seria basicamente da seguinte forma:

nome = 'João'
cursor.execute(f"UPDATE cliente SET nome={nome} WHERE idcliente=13")

O código acima irá atualizar o nome do cliente com id 13 para “João”. Até aí, tudo bem. Estamos apenas atualizando o nome de um cliente em nosso banco de dados. Porém, imagine que, ao invés de passar apenas ‘João’ para a variável nome, passarmos um código SQL:

nome = "'Carlos' , idade = 80"
cursor.execute(f"UPDATE cliente SET nome={nome} WHERE idcliente=13")

O código acima permitirá que o nome e idade do cliente com id 13 sejam alterados simultaneamente, sem permissão ou consentimento do administrador do sistema. Até pode paracer bobagem não permitir a edição da idade de um cliente, porém, imagine um sistema bancário com este mesmo problema e que permita que o valor do saldo seja alterado pelo usuário… Complicou, né?

A solução

Para solucionar o problema do SQL Injection, precisamos parametrizar as querys utilizadas em nosso programa e, assim, não permitir que um código SQL seja executado pelo lado cliente da aplicação. Para isso, alteramos a query da seguinte forma:

nome = "'Carlos' , idade = 80"
cursor.execute("UPDATE cliente SET nome=%(nome)s WHERE idcliente=13", ({'nome': nome, }))

Com o código acima, não vamos mais executar o código presente na variável "nome" no UPDATE. Ao invés disso, todo o conteúdo desta variável será armazenado como nome do cliente com id 13. Fazendo com que, o nome do cliente com id 13 seja "Carlos, idade = 80" e a sua idade permaneça inalterada.

Concluindo

Desta forma, não vamos mais permitir que os campos de uma determinada tabela sejam alterados sem permissão do sistema e, assim, garantimos muito mais segurança para a nossa aplicação.

Python - Banco de dados com DB API
Curso de Python - Banco de dados com DB API
CONHEÇA O CURSO