es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualizando fuentes de datos para mostrar en una tabla editable en una aplicación Dash.

Tengo una aplicación de Plotly/Dash.

En mi aplicación, cargo datos en algún punto del código.

# en algún lugar del cuerpo de la aplicación
data = get_data()

Más adelante, presento los datos en una tabla (DataTable) con la opción editable=True.

app.layout = html.Div(
    children=[
        dash_table.DataTable(
            id='myDataTable',
            columns=[{"name": i, "id": i} for i in data.columns],
            data=data.to_dict('records'),
            editable=True,
        ),
    ]), 

Luego, los usuarios pueden editar el contenido en línea y almacenar las modificaciones en una base de datos.

@app.callback(
    dash.dependencies.Output('a_text_area', 'value'),
    [dash.dependencies.Input('myDataTable', 'data')]
)
def loading_data(data):  
    D = pd.DataFrame(data)
    D.to_sql('test_backend', if_exists='replace')

    return 'actualizado'

Esto funciona muy bien; puedo guardar las modificaciones realizadas por el usuario en una base de datos.
Sin embargo, cuando refresco la página, las modificaciones realizadas por el usuario se pierden/no se vuelven a cargar usando get_data().
¿Cómo puedo garantizar que get_data() se llame cada vez que se actualice la página?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para asegurarse de que get_data() se llame cada vez que se actualice la página, puede utilizar una devolución de llamada para actualizar los datos en el componente DataTable. La devolución de llamada debe tener una salida que actualice la propiedad data del DataTable y no tener entradas. Esto se debe a que la función se llamará una vez al cargar la página para poblar los datos iniciales, y luego cada vez que se actualice la página después de eso.

    Aquí hay un ejemplo que debería funcionar para su caso específico:

    @app.callback(
        dash.dependencies.Output('myDataTable', 'data'),
        []
    )
    def update_data():
        data = get_data()
        return data.to_dict('records')
    

    Esta devolución de llamada recupera los datos utilizando get_data() y los convierte a un formato de diccionario que puede ser utilizado por el componente DataTable. Luego devuelve estos datos como la salida de la devolución de llamada, lo que actualizará la propiedad data del DataTable cada vez que se actualice la página.

    Al agregar esta devolución de llamada a su aplicación, debería poder asegurarse de que las modificaciones realizadas por el usuario no se pierdan cuando se actualice la página.

Comments are closed.