Aim was to create an UI that talks to Postgres DB. I wanted to do Create or Update rows using the dataframe the data editor creates. The code was working fine earlier. now it throws error :" Error during cell creation.
This should never happen. Please report this bug.
Error: Error: Row index is out of range: 8"
Update to the existing rows are working fine. only creation of new records is causing trouble.
I wanted to add rows to the dataframe by setting num_rows = “dynamic” using the dataeditor widget. But currently it’s just throwing error whenever I try to add new record. Please help me fix this. I use the session.state to update the dataeditor to have the latest data.
The main function :
def main() → None:
read_dotenv()
st.set_page_config(layout="wide")
st.title("Create or Update Records")
# Check if the session state has already been initialized
if "edited_df" not in st.session_state:
rows = run_query("SELECT * from table_dev.excel_test")
data = to_df(rows)
data.columns = [
"id",
"subscription_id",
"subscription_name",
"resource_id",
"status",
]
st.session_state.edited_df = data
edited_df_placeholder = st.empty()
# Display filtered data in data editor
edited_df = edited_df_placeholder.data_editor(
st.session_state.edited_df,
num_rows="dynamic",
use_container_width=True,
hide_index=False,
)
save_button_clicked = False
if st.button("Save Changes"):
save_button_clicked = True
updated_df = edited_df.copy()
if updated_df.equals(st.session_state.edited_df):
st.warning("No changes were made on UI.")
else:
for index, row in updated_df.iterrows():
if row["status"] not in {
"Not Started",
"In Progress",
"Pending",
"Rejected",
"Done",
}:
st.error(
f"Invalid status value '{row['status']}' entered for the id:{row['id']}. Please enter one of these: 'Not Started', 'In Progress', 'Pending', 'Rejected', 'Done'."
f" Save to the database failed."
)
return
with st.spinner("Saving changes to Database"):
update_resources_in_database(
updated_df, st.session_state.edited_df
)
st.session_state.edited_df = updated_df
st.success("Database updated successfully.")
if st.button("Reload Latest Data"):
with st.spinner("Reloading Latest Data..."):
changes_detected, updated_data = check_for_changes(
st.session_state.edited_df
)
if changes_detected:
st.session_state.edited_df = updated_data
# Update filtered_df with the latest data
filtered_df = st.session_state.edited_df
# Update data editor with the latest filtered data
edited_df_placeholder.data_editor(
st.session_state.edited_df,
num_rows="dynamic",
use_container_width=True,
hide_index=False,
)
st.success("Data reloaded successfully.")
Dependencies I have downloaded :
streamlit = “^1.32.2”
mitosheet= {version= “^0.1.566”}
pandas = “^2.1.0”