Tutorial: Aplicação em Python + SQLite (Parte 02)

Na primeira parte deste tutorial nós fizemos o “Frontend”. A interface gráfica está pronta, agora precisamos codificar o comportamento que elemento (objeto/widget) terá. Nesta parte faremos a interação com o banco de dados (SQLite)…

Apenas para lembrar, queremos fazer uma aplicação parecida com esta:

Cadastro de Clientes em Python

Cadastro de Clientes em Python

Índice:

Parte 02_ Backend;

Nesta parte, precisaremos criar o CRUD (Create, Read, Update e Delete) além, é claro,  de criar o banco em si.

Para esta aplicação, precisamos apenas de uma tabela (que se chamará clientes), com os seguintes campos:

  • Id
  • Nome
  • Sobrenome
  • Email
  • CPF

O SQLite faz esta tarefa ser bem simples…

O fonte acima se conecta ao banco de dados ‘clientes.db’ e cria a tabela cliente, caso não exista. Neste exemplo, ele será um arquivo no diretório da aplicação.

Ao indicar que o campo id é uma PRIMARY KEY, ela já será definida como auto-increment.

Crie um arquivo chamado Backend.py e importe a biblioteca sqlite3:

Sempre que utilizarmos o banco de dados, precisaremos repetir 4 linhas de código:

Estas linhas vão ser sempre iguais e eu não sou muito fã de ficar repetindo código, então vamos encapsular estas lógicas…. mas temos um problema: Ao acessar o banco, temos duas variáveis: A de conexão (conn) e o cursor (cur).

Uma das maneiras de fazer isso é criar uma classe que contenha toda essa lógica… Existem formas mais elegantes de se fazer isso, mas quero manter as coisas simples para este tutorial. (Depois farei uma outra série de posts falando sobre Orientação a Objetos no Python…)

Nossa classe que cuidará da conexão com o banco e das operações será chamada de TransactionObject:

Esta classe possui funções:

  • connect(): realiza conexão com o banco de dados
  • disconnect(): fecha a conexão com o banco de dados
  • execute(self, sql, parms): executa um comando no banco de dados. recebe três parâmetros:
    • self: referencia para o próprio objeto. não precisa ser informado;
    • sql: comando SQL a ser executado;
    • parms: vetor com os parâmetros do comando SQL. Pode ser omitido.
  • fetchall(): recupera os valores recebidos de um comando select.
  • persist(): realiza o commit das operações realizadas.

Quando a aplicação for executada pela primeira vez, precisaremos criar o banco de dados:

No fonte acima definimos a função initDB() e fazemos uma chamada a ela logo depois. Isso fará com que a aplicação chame esta função sempre que for iniciada. Ela se conecta ao banco de dados e cria a tabela  de clientes, caso não exista. Desta forma, sempre que a aplicação for executada, ela irá verificar se o banco existe ou não e toma as providências necessárias. Isso de forma transparente para o usuário.

Agora vamos começar a construir as funções que serão utilizadas pelo Frontend. A primeira delas é a view(), a função que vai recuperar todos os dados do banco.

A próxima é a função que insere novos registros no banco:

Agora vamos fazer a função de busca, que será realizada utilizando o operador OR e todos os campos que não forem preenchidos pelo usuário na hora da busca serão considerados como strings vazias…

A função de atualização é a próxima a ser criada:

Por último, vamos fazer a função para remover registros:

As operações encapsuladas são todas bem simples, quase sempre seguindo a sequencia: operação no banco de dados, commit e desconecta. Uma aplicação do mundo real seria mais complexa e possuiria lógicas de tratamento de erros e rollbacks, quando necessário.

Nesta seção criamos as funções que serão utilizadas no Frontend. Elas já estão funcionais e podem ser utilizadas através de script, mas ainda não estão interagindo com a parte gráfica e este é o próximo passo.

The following two tabs change content below.
Breno RdV
Ex-Psicólogo, com quase uma década de experiência em Recursos Humanos e Gestão de Pessoas, atual desenvolvedor e Analista de Sistemas, trabalhando com PowerBuilder, C#, PowerShell e expandindo horizontes para Python, Xamarin, PHP, Angular e (por que não?) Unity.

Comments

comments

Posted in Dev, Python and tagged , , , , , , , , .