Parte 2: Criando a tabela

De modo geral, sistemas de bancos de dados são programas que ficam executando infinitamente. Um programa externo pode se conectar a esse programa para interagir com o banco de dados. Esse vai ser o nosso primeiro passo. Como queremos realizar múltiplas operações no banco de dados, vamos encapsular (lembra desse termo de Desenvolvimento Colaborativo Ágil?) a responsabilidade de se comunicar com o banco de dados em uma classe chamada Database
. A função para se conectar ao banco de dados é:
Para mais detalhes, acesse Documentação SQLite3.
Preparação para o exercício
Neste handout vamos realizar a implementação do código utilizando a ferramenta Prairie Learn. Nela será possível testar o código utilizando uma versão do VS Code online.
Para isso, acesse o link a seguir: https://us.prairielearn.com/pl/course_instance/186865/assessment/2562434

- Escolha a opção de logar com uma conta Microsft.
- Faça o login utilizando seu email e senha do Insper.

- Clique no exercício
Handout 03 - Persistência de dados
- Clique na questão.
- Em seguida, clique em
Open workspace
que abrirá uma nova aba com o VS Code online.

Exercício 01
- Arquivo database.py Encontre um arquivo chamado
database.py
. - Importe: Nesse arquivo, importe o pacote
sqlite3
. -
Criando a Classe Nesse arquivo, crie uma classe chamada
Database
.- O construtor da classe receberá o nome do banco de dados.
- Na construção, o objeto deve guardar a conexão com o banco (resultado da chamada da função
sqlite3.connect
mostrada acima) em um atributo chamadoconn
.
Atenção: Note que o arquivo do banco de dados deve possui a extensão
.db
(exemplo: NOME_DO_ARQUIVO + '.db').Se não se lembrar a sintaxe de classes em Python, procure no Google ou acesse a
documentação.
-
Testando a solução: Para testar o seu código, procure o ícone a seguir na barra lateral do VS Code.
-
Clique no botão no
Run Test
para rodar os testes.Se tudo der certo, o ícone ficará verde, como na imagem abaixo.
Criando a tabela
Para o nosso projeto vamos precisar de apenas uma tabela. Essa tabela vai representar as anotações.

Para criar uma tabela com SQL utilizamos o comando:
Uma tabela só pode ser criada uma única vez. Você deveria encontrar um lugar para colocar o código de criação da tabela que só fosse executado uma única vez. Se você tentar criar a tabela mais de uma vez ocorrerá um erro.
Para não precisar se preocupar com isso você pode usar adicionar IF NOT EXISTS
para a tabela ser criada apenas se ainda não existir. Assim, você pode executar o comando múltiplas vezes sem se preocupar. O comando ficaria então:
As colunas da tabela são separadas por vírgula e são indicadas como NOME_DA_COLUNA TIPO_DA_COLUNA RESTRICOES_ADICIONAIS
. Alguns exemplos:
nome_da_rua TEXT NOT NULL
define uma coluna chamadanome_da_rua
, na qual podem ser inseridos apenas valores do tipo texto e ela não pode ser vazia;cpf TEXT NOT NULL UNIQUE
define uma coluna chamadacpf
, na qual podem ser inseridos apenas valores do tipo texto e os valores devem ser únicos, ou seja, não pode haver dois CPFs iguais;identificador INTEGER PRIMARY KEY
define uma coluna chamadaidentificador
, na qual podem ser inseridos apenas valores do tipo inteiro e ela será utilizada como chave primária (explicaremos abaixo o que isso significa).
Você poderia então, por exemplo, criar a tabela dados_pessoais
com o comando (note os parênteses e o ponto e vírgula):
CREATE TABLE IF NOT EXISTS dados_pessoais ( nome_da_rua TEXT NOT NULL,
cpf TEXT NOT NULL UNIQUE,
identificador INTEGER PRIMARY KEY);
Chave primária
Uma das características de bancos de dados é a possibilidade de encontrar dados rapidamente. Para isso é comum o uso de identificadores únicos. Identificadores do tipo inteiro, além de facilitarem a busca, podem ser utilizados em diversas otimizações.
Enviando um comando SQL para o banco de dados
Ok, já sei qual é o comando para criar uma tabela, mas como eu o envio para o banco de dados? Agora é a hora de utilizarmos a conexão que criamos no exercício anterior. O objeto armazenado no atributo conn
possui um método chamado execute
, que recebe uma string contendo um comando SQL e envia para o banco de dados.
Caso queira, procure um exemplo do uso do método execute
no link a seguir: Documentação SQLite3.
Exercício 02
Modifique o código do arquivo database.py
para que ele crie uma tabela no construtor da classe Database
.
Altere o exemplo abaixo, para criar uma tabela que deve se chamar note
e deve ter as colunas id
(chave primária do tipo inteiro), title
(do tipo string), content
(do tipo string e não pode ser vazia).
CREATE TABLE IF NOT EXISTS dados_pessoais ( identificador INTEGER PRIMARY KEY,
nome_da_rua TEXT NOT NULL,
cpf TEXT NOT NULL UNIQUE );
Normalmente, utilizamos o comando acima no sistema de banco de dados. Porém, neste exercício queremos utilizar o Python para enviar o comando para o banco de dados.
Veja um exemplo de como fazer isso: Documentação SQLite3
Rode os testes e se tudo estiver correto, o teste com o nome exercicio_02_create_table_on_init
deverá passar com sucesso.
Validando o resultado
Crie um arquivo chamado exemplo_de_uso.py
na mesma pasta com o seguinte conteúdo:
Após executar este programa, um arquivo chamado banco.db
deve ter aparecido na sua pasta. Esse arquivo contém todo o seu banco de dados. Na maioria dos bancos de dados os arquivos não ficam tão acessíveis, mas como o SQLite é uma opção mais simples e direta, se quiser apagar o banco, basta apagar esse arquivo (e na verdade é o que fazemos no test_database.py
).
Visualizando o banco de dados
- Baixe a extensão SQLite Viewer para o VS Code no seu computador.
- Faça o download do arquivo
banco.db
para o seu computador. Para isso, basta clicar com o botão direito no arquivo e selecionar a opçãoDownload
.
- Abra o arquivo no VS Code.
- Clique no arquivo
banco.db
e poderemos visualizar o banco de dados.
Você deve ver uma tela parecida com esta:
Veja que a tabela foi criada e as colunas estão listadas corretamente.
Agora que a tabela foi criada, podemos ir para a próxima parte.