Banco de dados Python SQL 2

Alterar Dados com Streamlit e o PostgreSQL

Alterar Dados com Streamlit e o PostgreSQL

Fala galera do mundo dos dados! Todo mundo bem? Espero que sim! Chegamos a última parte da série Criar CRUD com Streamlit e o PostgreSQL. É hora de alterar dados com Streamlit e o PostgreSQL

Este post é o último da série para construção de uma aplicação Web integrada com um banco de dados executando todas as operações do CRUD, confere as divisões do conteúdo:

Então, chegou a hora de finalizar a aplicação web!

Alterando Dados ao Cubo

Todo o processo será iniciado no arquivo main.py, que vai exibir um menu lateral onde o usuário tem a opção de navegar pelas páginas através do menu. Ao escolher a opção de Alterar a aplicação vai chamar a função update do módulo page.

# carregando as bibliotecas
import streamlit as st
# carregando as funções em outros arquivos .py
import page.update as update

# criando a barra lateral do menu
st.sidebar.title('Menu')
page = st.sidebar.selectbox('Cliente',['Inserir','Consultar','Alterar','Deletar'])

# carregando as páginas de acordo com a seleção do menu
if page == 'Alterar':
    update.alterar()

Para alterar dados no banco, teremos a tela da imagem abaixo, que será aberta quando o usuário selecionar o menu Alterar. Localizamos o usuário com o id, para carregar os dados já cadastrado no banco. Em seguida, será apresentado o form com os dados cadastrados do usuário. Aí é só modificar o que for necessário e clicar no botão Alterar.

Confere agora como essa página foi construída, e em seguida como e onde ela vai buscar esses dados para exibir.

Página Web com Streamlit

Chegou a hora de alterar os registros já inseridos no banco. Aqui precisaremos criar o estado da sessão para compartilhar variáveis ​​entre reexecuções e assim alterar os dados do id consultado quando o usuário clicar no botão Alterar. Começando pela seção, usaremos a função session_state para guardar o estado do form com os dados do usuário carregado a partir do id informado pelo usuário. Em seguida, os dados são enviados pelo botão Alterar para serem atualizados no banco de dados.

# carregando as bibliotecas
import streamlit as st
# carregando as funções em outros arquivos .py
import controller.cliente as cliente

# função para a página de alterar dados
def alterar():
  if "upda" not in st.session_state:
    st.session_state.upda = False

    st.title('Alterar Dados')
    profissoes = ['Analista de Dados', 'Engenheiro de Dados', 'Cientista de Dados']

    update_id = st.number_input(label='Insira o Id', format='%d', step=1)
    button_update_select = st.button('Consultar')

    if button_update_select:
      st.session_state.upda = True

      if st.session_state.upda == True:
        item = cliente.selecionar_id(update_id)[0]
        with st.form(key='update'):
          update_name = st.text_input(label='Insira o nome', value=item[1])
          update_age = st.number_input(label='Insira a idade', 
                                       format='%d', 
                                       step=1, 
                                       value=item[2])
          update_job = st.selectbox(label='Insira a profissão',
                                    options=profissoes,
                                    index=profissoes.index(item[3]))
          button_update = st.form_submit_button('Alterar')

          if button_update:
            cliente.alterar(update_name, update_age, update_job, item[0])
            st.success('Cliente alterado com sucesso!!!')
            st.session_state.upda = False

Os botões Consultar e Alterar farão a comunicação do Streamlit com o PostgreSQL através de duas funções: selecionar_id e alterar.

Streamlit e o PostgreSQL

Iniciamos com o serviço database para estabelecer a comunicação com o banco. Para o processo de alteração teremos duas funções: uma que consulta um id e exibe na tela o form de cadastro do usuário, e outra que altera o registro no banco. A função selecionar_id executará um código SQL com a função SELECT com uma cláusula WHERE que identifica o id do cliente informado pelo usuário. Já a função alterar executará um código SQL com a função UPDATE com uma cláusula WHERE que identifica o id do cliente informado pelo usuário e altera o registro na base de dados.

# carregando as funções em outros arquivos .py
import services.database as db

# função para selecionar apenas um registros no banco de dados
def selecionar_id (id):
  db.cur.execute("""
           SELECT * FROM clientes WHERE id = '%s'
   """ % (id))
  recset = db.cur.fetchall()
  rows = []
  for rec in recset:
    rows.append(rec)
  return rows

# função para alterar registros no banco de dados
def alterar (nome, idade, profissao, id):
  db.cur.execute("""
           UPDATE clientes SET (nome, idade, profissao) = ('%s', '%s', '%s')  WHERE id = '%s'
   """ % (nome, idade, profissao, id))
  db.con.commit()

E assim chegamos ao fim da construção de uma aplicação Web integrada com um banco de dados executando todas as operações do CRUD. Espero que vocês tenham curtido a solução. Confere todo o código no github do Dados ao Cubo. Não esqueça de mandar aquele feedback para nós, um abraço e até a próxima.

Conteúdos ao Cubo

Se curtiu, lá no Dados ao Cubo tem muito mais. Então, deixo algumas sugestões de conteúdos que você pode encontrar por lá, sempre falando sobre o mundo dos dados.

Finalizo com um convite para você ser Parceiro de Publicação Dados ao Cubo e escrever o próximo artigo, compartilhando conhecimento para toda a comunidade de dados. Não esqueça de assinar a nossa Newsletter para ficar por dentro de todas as novidades. 

Gostou? Compartilhe!

2 Comments

  • Reply
    FELIPE BERMOND GONÇALVES
    14 de fevereiro de 2023

    Olá Tiago!!!
    Por um acaso você chegou a fazer o Deploy desse código no streamlit??? Funcionou direitinho o DB Postgres juntamente com o Streamlit??? Em localhost tudo funciona perfeitamente… porem ao realizar o deploy, aparece um erro relacionado ao pg_config da biblioteca psycopg2. Poderia me ajudar?

    • Reply
      Tiago Dias
      22 de fevereiro de 2023

      Fala Felipe! Me manda um e-mail (tiago@dadosaocubo.com) que te ajudo com sua dúvida.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *