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:
- Criar CRUD com Streamlit e o PostgreSQL
- Inserir Dados com Streamlit e o PostgreSQL
- Consultar Dados com Streamlit e o PostgreSQL
- Deletar Dados com Streamlit e o PostgreSQL
- Alterar Dados com Streamlit e o PostgreSQL – Você está aqui, missão comprida!!!
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.
- Criando Modelos de Machine Learning com Pipeline do Scikit-Learn
- Classificação com scikit-learn
- Analisando Dados do Brasileirão Série A
- Reconhecimento de Voz com a Biblioteca SpeechRecognition Python
- O Guia do XGBoost com Python
- Parceiro de Publicação D³
- Visualização de Dados com Matplotlib Python
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.

Baiano, apaixonado por dados e tecnologia, amante das inovações tecnológicas que facilitam a vida humana! Formado em Engenharia da Computação e com MBA em Gestão da Informação e Business Intelligence e especialização em Data Science. Atualmente atua como Data Tech Lead na Lopes, além de Professor na área de dados e nas horas vagas cria uns modelos de Machine Learning com Python e soluções diversas com dados!
2 Comments
FELIPE BERMOND GONÇALVES
14 de fevereiro de 2023Olá 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?
Tiago Dias
22 de fevereiro de 2023Fala Felipe! Me manda um e-mail (tiago@dadosaocubo.com) que te ajudo com sua dúvida.