Olá estudante, tudo bem?
Dando sequência ao estudo de dados, agora, trabalharemos com a conexão e a manipulação do banco de dados que é onde se persistem (salvam) os dados validados em uma aplicação. Sendo assim, o objetivo desta lição é o capacitar a compreender e aplicar os conceitos fundamentais relacionados à conexão e manipulação de banco de dados utilizando a linguagem de programação Python. Assim, abordarei a compreensão dos fundamentos de banco de dados, a introdução ao SQLite em Python e, finalmente, a conexão e manipulação de dados explorando as operações CRUD (Create, Read, Update, Delete) para manipulação de dados no contexto de um banco de dados.
Portanto, ao final desta lição, você deverá estar apto a desenvolver aplicações Python que interagem eficientemente com banco de dados, contribuindo, assim, para seu crescimento como técnico em desenvolvimento de sistemas.
No contexto do desenvolvimento de software, muitas vezes, deparamo-nos com a desafiadora tarefa de gerenciar grandes volumes de dados de maneira eficiente e escalável. Imagine uma aplicação que precise armazenar e recuperar informações críticas, como dados do usuário, registros transacionais ou configurações do sistema. Como lidar com a persistência desses dados de forma organizada e acessível?
Esse é um problema central no desenvolvimento de software: a necessidade de uma solução robusta para conexão e manipulação de banco de dados. Os dados, a espinha dorsal de qualquer aplicação significativa, precisam ser armazenados de maneira segura, eficiente e facilmente acessível. É nesse cenário desafiador que entra a importância da utilização de Python para conectar e manipular bancos de dados.
Python, com suas bibliotecas especializadas, como sqlite3, oferece uma solução eficiente para esse problema. Com uma sintaxe simples e intuitiva, desenvolvedores podem estabelecer conexões com bancos de dados, criar tabelas e inserir, modificar e consultar dados com facilidade. A flexibilidade da linguagem permite a integração suave com diferentes sistemas de gerenciamento de banco de dados (SGBDs), proporcionando uma solução escalável e adaptável às necessidades específicas do projeto.
Ao adotar boas práticas de conexão e manipulação de banco de dados em Python, os desenvolvedores, além de garantir a integridade e segurança dos dados, também, proporcionam uma experiência eficiente para os usuários finais da aplicação.
Hoje, você conhecerá um case fictício sobre a empresa ModernSoft Solutions, uma empresa fictícia especializada em soluções de software para gestão empresarial, que enfrentava um desafio significativo em um de seus projetos mais recentes: desenvolver um sistema que otimizasse a gestão de recursos humanos e materiais para empresas de médio porte, em que a solução permitisse o armazenamento eficiente de dados sobre funcionários, projetos, estoques e atividades.
Sem banco de dados, a gestão manual dessas informações estava se tornando insustentável à medida que a empresa crescia. Acesso rápido, consultas complexas e atualizações dinâmicas demandam uma abordagem mais robusta garantindo a integridade dos dados e, ao mesmo tempo, fornecendo uma interface amigável para os usuários finais interagirem com as informações.
A equipe de desenvolvimento, então, decidiu adotar Python como linguagem principal, devido à sua versatilidade e eficácia no desenvolvimento de aplicativos empresariais, e também optou por utilizar um banco de dados relacional para armazenar e gerenciar os dados de forma estruturada. A escolha do SQLite foi estratégica, dada a natureza leve e incorporada do banco de dados, adequada para a aplicação de médio porte que estavam desenvolvendo. Com a aplicação conectada ao SQLite, não apenas foram atendidas às necessidades atuais, mas também oferecida uma base sólida para futuras expansões e melhorias.
Antes de trabalhar com a conexão e, posteriormente, a manipulação de dados, é importante que você conheça alguns conceitos e definições desse mundo de banco de dados relacional, que, segundo Menezes (2017), foram desenvolvidos de forma a organizar e facilitar o acesso à grande massa de informação. Vamos conhecer os conceitos e as definições mais importantes para o tema que estudaremos hoje?
Definição: uma tabela é uma estrutura fundamental em um banco de dados relacional. Ela organiza os dados de maneira tabular, semelhante a uma planilha, dividindo as informações em linhas e colunas.
Exemplo prático: em um banco de dados de uma empresa, pode haver uma tabela de funcionários, em que cada linha representa um funcionário e cada coluna representa um atributo associado a esse funcionário, como nome, cargo, e-mail etc.
Definição: também conhecidos como tuplas ou entradas, os registros são as linhas individuais em uma tabela. Cada registro contém informações específicas relacionadas a um item ou entidade representado pela tabela.
Exemplo prático: na tabela de funcionários, cada registro seria uma linha que contém os detalhes específicos de um único funcionário, como seu nome, cargo e informações de contato.
Definição: campos são as colunas em uma tabela que representam atributos ou características específicos dos registros. Cada campo tem um tipo de dado associado que define o tipo de informação que pode ser armazenado nele.
Exemplo prático: se a tabela de funcionários tem campos, como "Nome", "Cargo" e "E-mail", cada funcionário individual terá dados específicos preenchidos em cada um desses campos.
Chave Primária:
Definição: uma chave primária é um campo ou conjunto de campos que identifica exclusivamente cada registro em uma tabela. Cada tabela, geralmente, tem uma chave primária para garantir a unicidade dos registros.
Exemplo prático: em uma tabela de funcionários, a chave primária poderia ser o número de identificação único de cada funcionário.
Chave Estrangeira:
Definição: uma chave estrangeira é um campo em uma tabela que estabelece uma relação com a chave primária em outra tabela. Essa relação é fundamental para conectar dados entre diferentes tabelas.
Exemplo prático: se houver uma tabela separada para departamentos, a tabela de funcionários pode conter uma chave estrangeira que referencia o departamento ao qual cada funcionário está associado.
Outro aspecto importante nos bancos de dados é a noção de relacionamentos entre diferentes conjuntos de dados. Menezes (2017) destaca que a SQL (Structured Query Language, ou Linguagem de Consulta Estruturada) desempenha papel fundamental na definição e manipulação desses relacionamentos. Por meio da SQL, podemos estabelecer conexões entre tabelas, definir chaves estrangeiras e realizar consultas complexas que envolvem múltiplas entidades inter-relacionadas. Assim, a SQL não apenas nos permite gerenciar os dados em si, mas também nos capacita a explorar e compreender as interconexões e associações entre eles.
Ainda sobre a SQL é importante salientar a estrutura de modo geral de como essa linguagem funciona. Possivelmente, esse assunto seja abordado, de forma mais aprofundada, na disciplina de banco de dados, porém, para relembrar, você pode conferir a Figura 1:
Cada item dessa lista é importante, pois fornece uma estrutura organizada para armazenar e recuperar dados de maneira eficiente. Além disso, as chaves — especialmente a chave primária — garantem a integridade dos dados, evitando duplicatas e relacionamentos inconsistentes. Já as chaves estrangeiras facilitam a criação de relacionamentos entre diferentes conjuntos de dados, possibilitando uma representação mais precisa das relações no mundo real. Por fim, a organização em tabelas simplifica a execução de consultas complexas e a recuperação seletiva de informações.
De acordo com Menezes (2017), o SQLite é um gerenciador de dados leve e completo, muito utilizado e presente mesmo em telefones celulares. Diferentemente de sistemas de banco de dados mais robustos, o SQLite opera sem a necessidade de um servidor separado, sendo incorporado diretamente nas aplicações. Essa característica faz do SQLite uma opção ideal para projetos que exigem simplicidade e portabilidade.
Para facilitar ainda mais a criação e manipulação de bancos de dados SQLite em Python, a linguagem oferece um módulo integrado denominado sqlite3. Basta utilizar o comando import sqlite3 para começar a utilizar suas funcionalidades.
A conexão e os passos básicos para criar e se conectar a um banco de dados SQLite usando a biblioteca do Python são simples como você pode conferir na Figura 2, a seguir:
Vamos entender melhor a Figura 2?
Linha 1: importa o módulo sqlite3.
Linhas 2: cria ou se conecta no banco dados SQLite meu_banco_de_dados.db. Se o banco de dados ainda não existir, ele será criado automaticamente.
Linha 4: cria um cursor que é um objeto que permite a execução de comandos SQL no banco de dados.
Linhas 6 a 9: cria a tabela funcionários com id, nome e cargo.
Linha 11: insere, na tabela funcionários, um registro com o nome João e o Cargo desenvolvedor.
Linha 13: realiza o commit para salvar as alterações no banco de dados.
Linha 14: fecha a conexão criada com o banco de dados na linha 2 desse exemplo.
As operações CRUD (Create, Read, Update, Delete) são fundamentais para a manipulação eficaz de dados em qualquer banco de dados. Vamos explorar como realizar essas operações no contexto do SQLite utilizando a linguagem de programação Python?
O CREATE (Criar) já foi devidamente retratado e exemplificado na Figura 1, mais especificamente na linha 11. Portanto, irei diretamente para a próxima operação. A Operação READ (Ler) refere-se à consulta e leitura de dados existentes em uma tabela, como na Figura 3.
Vamos entender melhor a Figura 3?
Linhas 1 a 3: comentários sobre o que deve ser feito antes da leitura de dados, omitidos para gerar um exemplo menor.
Linha 5: prepara e descreve uma consulta no banco de dados por meio do cursor que busca todos os registros da tabela funcionarios.
Linha 6: executa a consulta preparada na linha 5.
Linha 8 e 9: realiza a iteração em cada um dos registros encontrados e os imprime um a um.
Linha 11: apenas encerra a conexão uma vez que o commit() não é necessário devido à não alteração do banco de dados atual.
A operação UPDATE (Atualizar) permite modificar dados existentes em uma tabela conforme você pode conferir na Figura 4, a seguir:
Vamos entender melhor a Figura 4?
Linha 1: novamente, comentário representando o que deve ser feito antes da linha 3 (preparação).
Linha 3: executa um comando SQL que atualiza o cargo do funcionário de nome Maria para Gerente.
Linha 5: realiza o commit para salvar as alterações no banco de dados.
Linha 6: fecha a conexão com o banco de dados.
A operação DELETE (Excluir) envolve a remoção de registros de uma tabela conforme você pode conferir na Figura 5, a seguir:
Vamos entender melhor a Figura 5?
Linha 1: novamente, comentário representando o que deve ser feito antes da linha 3 (preparação).
Linha 3: executa um comando SQL que remove o registro do funcionário com o nome de Maria.
Linha 5: realiza o commit para salvar as alterações no banco de dados.
Linha 6: fecha a conexão com o banco de dados.
Chegamos ao final! Durante esta lição, exploramos os conceitos fundamentais de conexão e manipulação de bancos de dados, esses que são essenciais para o desenvolvimento de aplicações eficientes e robustas. Com as ferramentas e os conhecimentos adquiridos, você está mais preparado para criar aplicações que interagem, de forma eficiente, com bancos de dados, contribuindo para nosso crescimento profissional como desenvolvedores de sistemas versáteis e capacitados.
A lição de hoje é de suma importância para você, futuro técnico em desenvolvimento de sistemas, pois aborda a compreensão e aplicação dos conceitos fundamentais relacionados à conexão e manipulação de banco de dados utilizando a linguagem de programação Python. A capacidade de conectar-se a um banco de dados e realizar operações CRUD (Create, Read, Update, Delete) é essencial para qualquer desenvolvedor que precise persistir dados validados em uma aplicação. A habilidade de manipular dados de forma eficiente e segura é importante e necessária para o desenvolvimento de sistemas robustos e funcionais, tornando esta lição indispensável para o aprimoramento das competências técnicas enquanto profissional.
Agora, que tal implementar um exemplo do que estudamos hoje? Siga o passo a passo para implementar uma classe CRUD (Create, Read, Update, Delete) de usuários utilizando o SQLite 3 em Python:
Abra seu navegador web e acesse o site OnlineGDB em https://www.onlinegdb.com.
Escolha a linguagem de programação que deseja usar. Selecione “Python” na lista suspensa.
Implemente o código da Figura 6, a seguir:
Entenda melhor linha a linha:
Linha 1: importa a biblioteca sqlite3.
Linha 3: implementa a classe CRUDUsuarios em Python.
Linhas 4 a 8: define o construtor da classe que recebe o nome do banco de dados como parâmetro.
Linhas 10 a 15: cria a tabela usuários no banco de dados informado.
Linhas 17 a 19: cria um novo registro de usuário baseado no nome email passados como parâmetros na assinatura do método.
Linhas 21 a 23: executa uma busca por todos os usuários da tabela usuários do referido banco de dados.
Linhas 25 a 27: atualiza um usuário com nome e email passados por parâmetro de um referido ID, também, passado por parâmetro.
Linhas 29 a 31: exclui um usuário do banco de dados com base no id passado como parâmetro do método.
Essa prática demonstra a criação de uma classe CRUDUsuarios que utiliza SQLite3 para realizar operações CRUD em uma tabela de usuários. Você pode adaptar e expandir esse código de acordo com as necessidades do seu projeto. Desafie seus colegas e seu professor a exemplificar o usuário dessa classe a fim de obtermos seus resultados e maior entendimento!
MENEZES, N. N. C. Introdução à Programação com Python: algoritmos e lógica de programação para iniciantes. 2. São Paulo: Novatec, 2017.