image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Fernanda Araujo
Fernanda Araujo13/07/2025 00:58
Compartilhe

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
    Compartilhe
    Recomendados para você
    Microsoft - Azure AZ-900
    Ri Happy - Front-end do Zero #2
    Avanade - Back-end com .NET e IA
    Comentários (3)
    DIO Community
    DIO Community - 16/07/2025 09:01

    Fernanda, você trouxe um excelente exemplo de como estruturas de dados podem ser aplicadas de forma prática, com uma abordagem didática. O projeto de Agenda Inteligente utilizando Python e SQLite permite que o desenvolvedor se aproxime de conceitos complexos de forma intuitiva e funcional.

    Você também abordou a combinação de várias estruturas de dados para resolver problemas do dia a dia, o que é uma forma poderosa de demonstrar sua utilidade em aplicações reais.

    A ideia de expandir o projeto para um frontend e integrar com PostgreSQL são ótimas maneiras de levar o projeto para um nível mais avançado.

    Como sugestão, além das expansões futuras, o que você acha de incluir a integração com APIs externas para obter dados em tempo real, como tarefas ou lembretes?

    Fernanda Araujo
    Fernanda Araujo - 14/07/2025 01:43

    Obrigada pelo feedback @Michel

    Fico feliz que gostou, python é super pratico e versátil mesmo... lida muito bem com dados 🤩

    Tenho um outro projeto bem parecido inspirado em uma agenda Kanban, pode implementar banco de dados com azure ou aws, utilizar llms para lembretes, pode usar usa criatividade.

    Michel Rebouças
    Michel Rebouças - 13/07/2025 11:08

    Que projeto incrível! Parabéns pelo detalhamento — ficou super didático, principalmente a forma como vocês explicaram o uso das estruturas de dados (listas, filas, pilhas, árvores) e integraram com SQLite.Gostei muito da ideia de construir uma agenda totalmente em Python, unindo teoria e prática de forma tão clara. Deu vonta de testar e adaptar no meu próprio ritmo e até ver algumas ideias que posso implementar.

    Obrigado por compartilhar um guia tão completo, com certeza vai ajudar muita gente a dar o primeiro passo ou a aprofundar os conhecimentos!