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?
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 componenteDataTable
. La devolución de llamada debe tener una salida que actualice la propiedaddata
delDataTable
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:
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 componenteDataTable
. Luego devuelve estos datos como la salida de la devolución de llamada, lo que actualizará la propiedaddata
delDataTable
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.