image

Unlimited bootcamps + English course forever

80
%OFF
Article image
Fernanda Araujo
Fernanda Araujo13/07/2025 00:58
Share

Unindo Estrutura de Dados e Banco de Dados com Python – criando uma Agenda Inteligente

    Guia prático para quem quer aprender estruturas de dados na prática com Python e SQLite, construindo uma aplicação funcional, persistente e lógica. 👩🏻‍💻✔️

    📌 Pré-requisitos

    Antes de começar, tenha isso preparado:

    • Python 3.10 (instalado)
    • Git instalado e uma conta no github (pode usar o desktop também, se quiser instalar...)
    • VSCode ou sua IDE favorita
    • Terminal integrado funcionando (com git e github tudo pronto para o versionamento)

    > Obs: Todo o projeto é backend

    📌 Estrutura do Projeto

    agenda-inteligente/
    ├── agenda.py
    ├── estrutura_arvore.py
    ├── .gitignore
    └── tarefas.db 
    

    📌 Criando a pasta do projeto

    Abra o terminal (bash dentro do terminal do próprio VSCode) e execute:

    mkdir agenda-inteligente
    cd agenda-inteligente
    code . --reuse-window
    

    Criando os arquivos necessários:

    touch agenda.py estrutura_arvore.py
    

    O arquivo tarefas.db será criado automaticamente na primeira execução do Python, então não crie ele manualmente.

    📌 Inicializando o Git no projeto

    No terminal vscode:

    git init
    

    Isso cria uma pasta oculta .git/ e permite versionar o projeto com Git.

    Criando o .gitignore (opcional, mas recomendado):

    echo __pycache__/ > .gitignore && echo tarefas.db >> .gitignore
    

    🔹 > : cria o arquivo e escreve a primeira linha

    🔹 >> : adiciona a segunda linha

    Criado o arquivo chamado .gitignore agora escreva no arquivo:

    __pycache__/
    tarefas.db
    

    Isso impede que o Git envie arquivos desnecessários (como cache do Python e o banco SQLite local).

    Agora, vamos para a criação dos códigos, dentro dos arquivos já criados...

    image

    ▪️Criando o banco de dados com SQLite usando Python

    📄 agenda.py

    import sqlite3
    
    def criar_banco():
      with sqlite3.connect("tarefas.db") as conn:
          cursor = conn.cursor()
          cursor.execute("""
          CREATE TABLE IF NOT EXISTS tarefas (
              id INTEGER PRIMARY KEY AUTOINCREMENT,
              titulo TEXT NOT NULL,
              prioridade TEXT CHECK(prioridade IN ('Alta', 'Média', 'Baixa')),
              status TEXT CHECK(status IN ('Pendente', 'Em andamento', 'Concluída')) DEFAULT 'Pendente',
              data_criacao DATETIME DEFAULT CURRENT_TIMESTAMP
          );
          """)
      print("Banco criado com sucesso!")
    

    Essa função cria o banco e garante que a tabela só será criada uma vez.

    ▪️ Inserindo tarefas e usando listas

    📄 agenda.py (adicione abaixo da função criar_banco)

    def inserir_tarefa(titulo, prioridade):
      with sqlite3.connect("tarefas.db") as conn:
          cursor = conn.cursor()
          cursor.execute("""
          INSERT INTO tarefas (titulo, prioridade) VALUES (?, ?)
          """, (titulo, prioridade))
      print(f"📝 Tarefa '{titulo}' adicionada!")
    

    Aqui usamos listas no sentido de recuperar/exibir todas as tarefas salvas...

    def listar_tarefas():
      with sqlite3.connect("tarefas.db") as conn:
          cursor = conn.cursor()
          cursor.execute("SELECT * FROM tarefas")
          for t in cursor.fetchall():
              print(f"[{t[0]}] {t[1]} | Prioridade: {t[2]} | Status: {t[3]}")
    

    ▪️Usando Fila para tarefas pendentes

    📄 agenda.py

    from collections import deque
    
    def carregar_fila():
      fila = deque()
      with sqlite3.connect("tarefas.db") as conn:
          cursor = conn.cursor()
          cursor.execute("SELECT * FROM tarefas WHERE status = 'Pendente' ORDER BY data_criacao")
          for row in cursor.fetchall():
              fila.append(row)
      return fila
    

    Fila é uma estrutura FIFO (First In, First Out). Aqui usamos para manter a ordem cronológica.

    ▪️Usando Pilha para histórico de tarefas concluídas

    pilha_concluidas = []
    
    def executar_fila():
      fila = carregar_fila()
      while fila:
          tarefa = fila.popleft()
          print(f"Executando: {tarefa[1]} (Prioridade: {tarefa[2]})")
          atualizar_status(tarefa[0], "Concluída")
          pilha_concluidas.append(tarefa)
    
    def atualizar_status(id, novo_status):
      with sqlite3.connect("tarefas.db") as conn:
          cursor = conn.cursor()
          cursor.execute("UPDATE tarefas SET status = ? WHERE id = ?", (novo_status, id))
    

    A pilha (LIFO) armazena tarefas concluídas para você reverter se quiser.

    ▪️Usando Árvore para organizar tarefas

    📄 estrutura_arvore.py

    class No:
      def __init__(self, tarefa):
          self.tarefa = tarefa
          self.esquerda = None
          self.direita = None
    
    def prioridade_valor(p):
      return {"Baixa": 1, "Média": 2, "Alta": 3}[p]
    
    def inserir(raiz, tarefa):
      if not raiz:
          return No(tarefa)
      if prioridade_valor(tarefa[2]) < prioridade_valor(raiz.tarefa[2]):
          raiz.esquerda = inserir(raiz.esquerda, tarefa)
      else:
          raiz.direita = inserir(raiz.direita, tarefa)
      return raiz
    
    def em_ordem(raiz):
      if raiz:
          em_ordem(raiz.esquerda)
          print(f"{raiz.tarefa[1]} - {raiz.tarefa[2]}")
          em_ordem(raiz.direita)
    

    📄 agenda.py (adicionar import e uso):

    from estrutura_arvore import inserir, em_ordem
    
    def organizar_com_arvore():
      raiz = None
      with sqlite3.connect("tarefas.db") as conn:
          cursor = conn.cursor()
          cursor.execute("SELECT * FROM tarefas")
          for t in cursor.fetchall():
              raiz = inserir(raiz, t)
      print("Tarefas organizadas por prioridade:")
      em_ordem(raiz)
    

    ▪️Como Rodar o Projeto

    No terminal bash:

    python agenda.py
    

     Agora coloque esse trecho no final do seu arquivo agenda.py:

    python
    
    if __name__ == "__main__":
      criar_banco()
      inserir_tarefa("Estudar Python", "Alta")
      inserir_tarefa("Estudar Java", "Baixa")
      listar_tarefas()
      executar_fila()
      organizar_com_arvore()
    

    ▪️Como deve ficar todo o seu arquivo 'agenda.py', com a ultima função 'executar_fila()':

    def executar_fila():
      fila = carregar_fila()
      while fila:
          tarefa = fila.popleft()
          print(f"Executando: {tarefa[1]} (Prioridade: {tarefa[2]})")
          atualizar_status(tarefa[0], "Concluída")
          pilha_concluidas.append(tarefa)
    

    Feche e abra o terminal, e vamos testar:

    Acesse a pasta do projeto

    cd caminho/da/sua/pasta/...
    

    no meu caso:

    cd /c/Users/Fernanda/OneDrive/Documentos/Projetos/agenda-inteligente 
    

    Execute o projeto:

    python agenda.py
    

    logo após sairá o seu resultado no terminal...

    ✔️ Testando

    • Teste inserindo tarefas manualmente e rodando as funções.
    • Use listar_tarefas() para ver tudo.
    • Use executar_fila() para simular o dia a dia.
    • Use organizar_com_arvore() para ver ordenação por prioridade.

    🧠 Expansões Futuras

    • Criar interface com Flask ou Streamlit 🧑‍💻
    • Conectar com PostgreSQL para produção
    • Adicionar login e usuários (front end)
    • Exportar para CSV ou JSON
    • Desfazer tarefas com a pilha
    • Deploy na nuvem (AWS, Azure, etc.)

    📚 Conclusão

    Com poucas linhas de Python puro, você aprendeu:

    • Como usar listas, filas, pilhas e árvores no mundo real
    • Como persistir dados com SQLite
    • Como aplicar lógica de programação de forma didática e modular
    • Como criar um sistema inteligente, funcional e extensível
    Share
    Recommended for you
    Deal Group - AI Centric .NET
    Randstad - Análise de Dados
    BairesDev - Machine Learning Training
    Comments (0)