Corrected code:
import streamlit as st
import pandas as pd
import mysql.connector
def connect_to_mysql(host, port, username, password, database):
try:
conn = mysql.connector.connect(
host=host,
user=username,
port=port,
password=password,
database=database
)
return conn
except mysql.connector.Error as e:
st.error(f"Errore durante la connessione al database: {e}")
return None
def titoli():
with st.container():
col1, col2, col3 = st.columns([1, 1, 1])
with col1:
option = st.selectbox(
"Scegli tabella da modificare",
("Titoli","Paesi","Watchlists","Sub-Watchlists"),
index=None,
placeholder="Seleziona..",
)
if option=="Titoli":
conn = connect_to_mysql(......)
if conn is None:
return
# Esegui la query e visualizza i risultati
cursor = conn.cursor()
cursor.execute("SELECT idtitolo, titolo, ticker, idpaese FROM outputdb.tbtitoli ORDER BY titolo ASC")
data = cursor.fetchall()
columns = [col[0] for col in cursor.description]
df = pd.DataFrame(data, columns=columns)
# Ottieni i nomi dei paesi
cursor.execute("SELECT idpaese, paese FROM outputdb.tbpaesi ORDER BY paese ASC")
data2 = cursor.fetchall()
columns = [col[0] for col in cursor.description]
df2 = pd.DataFrame(data2, columns=columns)
dic = {row['idpaese']: row['paese'] for _, row in df2.iterrows()}
# Aggiungi una nuova colonna al dataframe df con il nome del paese
df['paese'] = df['idpaese'].map(dic)
# Visualizza i dati in un editor di dati Streamlit
edited_df = st.data_editor(
df,
column_config={
"idpaese": st.column_config.Column(
"idpaese",
width=0),
"paese": st.column_config.SelectboxColumn(
"paese ...",
help="Il paese di emissione",
width="medium",
options=df2['paese'].unique(),
default=df2['paese'].iloc[0],
required=True,
)
},
height=800,
width=800
)
# Salva le modifiche apportate alla tabella
if st.button("Salva modifiche"):
# Aggiorna i dati nel database
for index, row in edited_df.iterrows():
# Ottieni l'ID del paese selezionato
selected_paese = row['paese']
paese_id = [k for k, v in dic.items() if v == selected_paese][0]
query = "UPDATE outputdb.tbtitoli SET titolo=%s, ticker=%s, idpaese=%s WHERE idtitolo=%s"
values = (row['titolo'], row['ticker'], paese_id, row['idtitolo'])
cursor.execute(query, values)
conn.commit()
st.write("Modifiche alla lista titoli salvate con successo!")
conn.close()
if option=="Paesi":
conn = connect_to_mysql(...........)
if conn is None:
return
# Esegui la query e visualizza i risultati
cursor = conn.cursor()
cursor.execute("SELECT idpaese, paese FROM outputdb.tbpaesi ORDER BY paese ASC")
data = cursor.fetchall()
columns = [col[0] for col in cursor.description]
df = pd.DataFrame(data, columns=columns)
# Visualizza i dati in un editor di dati Streamlit
edited_df = st.data_editor(df,height=800,width=600)
# Salva le modifiche apportate alla tabella
if st.button("Salva modifiche"):
# Aggiorna i dati nel database
for index, row in edited_df.iterrows():
query = "UPDATE outputdb.tbpaesi SET paese=%s WHERE idpaese=%s"
values = (row['paese'], row['idpaese'])
cursor.execute(query, values)
conn.commit()
st.write("Modifiche ai paesi salvate con successo!")
# Chiudi la connessione al database
conn.close()
if option=="Watchlists":
conn = connect_to_mysql(..............)
if conn is None:
return
# Esegui la query e visualizza i risultati
cursor = conn.cursor()
cursor.execute("SELECT idlista, lista, Excel, bardescr, Nota, flag FROM outputdb.tbliste")
data = cursor.fetchall()
columns = [col[0] for col in cursor.description]
df = pd.DataFrame(data, columns=columns)
# Visualizza i dati in un editor di dati Streamlit
edited_df = st.data_editor(df,
height=800,
width=1200
)
# Salva le modifiche apportate alla tabella
if st.button("Salva modifiche"):
# Aggiorna i dati nel database
for index, row in edited_df.iterrows():
query = "UPDATE outputdb.tbliste SET lista=%s, Excel=%s, bardescr=%s, Nota=%s, flag=%s WHERE idlista=%s"
values = (row['lista'], row['Excel'], row['bardescr'], row['Nota'], row['flag'], row['idlista'])
cursor.execute(query, values)
conn.commit()
st.write("Modifiche alla Watchlists salvate con successo!")
# Chiudi la connessione al database
conn.close()
if option=="Sub-Watchlists":
conn = connect_to_mysql(........................')
if conn is None:
return
# Esegui la query e visualizza i risultati
cursor = conn.cursor()
cursor.execute("SELECT idslista, idlista, idtitolo FROM outputdb.tbsliste")
data = cursor.fetchall()
columns = [col[0] for col in cursor.description]
df = pd.DataFrame(data, columns=columns)
# Ottengo i nomi dei titoli
cursor.execute("SELECT idtitolo, titolo FROM outputdb.tbtitoli")
data2 = cursor.fetchall()
columns = [col[0] for col in cursor.description]
df2 = pd.DataFrame(data2, columns=columns)
dic = {row['idtitolo']: row['titolo'] for _, row in df2.iterrows()}
# Aggiungi una nuova colonna al dataframe df con il nome del titolo
df['titolo'] = df['idtitolo'].map(dic)
# Visualizza i dati in un editor di dati Streamlit
edited_df = st.data_editor(
df,
column_config={
"titolo": st.column_config.SelectboxColumn(
"titolo ...",
help="Il titolo",
width="medium",
options=df2['titolo'].unique(),
default=df2['titolo'].iloc[0],
required=True,
)
},
height=800,
width=800
)
# Salva le modifiche apportate alla tabella
if st.button("Salva modifiche"):
# Aggiorna i dati nel database
for index, row in edited_df.iterrows():
# Ottieni l'ID del titolo selezionato
selected_titolo = row['titolo']
titolo_id = [k for k, v in dic.items() if v == selected_titolo][0]
query = "UPDATE outputdb.tbsliste SET idlista=%s, idtitolo=%s WHERE idslista=%s"
values = (row['idlista'], titolo_id, row['idslista'])
cursor.execute(query, values)
conn.commit()
st.write("Modifiche alla Sub-Watchlists salvate con successo!")
# Chiudi la connessione al database
conn.close()