刷新数据源以显示在 Dash 应用程序的可编辑 DataTable 中

refreshing data sources to be shown in editable DataTable in a Dash app

我有一个 plotly/dash 应用程序。

在我的应用程序中,我在某个时刻加载数据

# somewhere in app body
data=get_data()

稍后,我将数据呈现在 DataTable 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,    
                     ]),
    ]), 

稍后,用户可以在线编辑内容并将修改存储在数据库中

@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 'updated'

这很好用;我可以让我的用户修改记录在数据库中。 但是,当我刷新页面时,用户修改 lost/not 使用 get_data() 重新加载。 如何确保每次刷新页面时都调用get_data()?

对于页面加载更新,您可以将 app.layout 设置为一个函数。

If you set app.layout to a function, then you can serve a dynamic layout on every page load.

https://dash.plotly.com/live-updates

简单示例

def serve_layout():
    cursor.execute('SELECT CURRENT_TIME')
    current_time = cursor.fetchone()
    return html.H1(current_time)

app.layout = serve_layout

在上面的示例中,时间是从数据库中检索的,并在每次刷新页面时更新。

在你的情况下,你可以把你的 get_data 函数调用放在那里,然后 return 你的布局包含你的 DataTable.