【问题标题】:Modified data in data table component is not displayed on page reload数据表组件中修改的数据在页面重新加载时不显示
【发布时间】:2020-10-05 04:30:22
【问题描述】:

数据solar.csv:https://raw.githubusercontent.com/plotly/datasets/master/solar.csv

这是一个代码:

import dash
import dash_table
import dash_html_components as html
from dash.dependencies import Input, Output, State
import pandas as pd
from dash.exceptions import PreventUpdate

df = pd.read_csv('D:/solar.csv')

app = dash.Dash(__name__)

app.layout = html.Div([
            dash_table.DataTable(
                id='table',
                columns=[{"name": i, "id": i} for i in df.columns],
                data=df.to_dict("rows"),
                editable=True
            ),
            html.Button(id="save-button",n_clicks=0,children="Save"),
            html.Div(id="output-1",children="Press button to save changes")
])

@app.callback(
        Output("output-1","children"),
        [Input("save-button","n_clicks")],
        [State("table","data")]
        )

def selected_data_to_csv(nclicks,table1): 
    if nclicks == 0:
        raise PreventUpdate
    else:
        pd.DataFrame(table1).to_csv('D:/solar.csv',index=False)
        return "Data Submitted"

if __name__ == '__main__':
    app.run_server(debug=True)

当我从浏览器编辑表格中的数据并按下保存按钮后,修改后的数据正确保存在solar.csv 中。问题是,如果我刷新页面旧数据(未修改)数据就会显示出来。

我尝试了几种方法,例如在 selected_data_to_csv() 中使用全局变量,但没有任何运气。

问题:如何修改上面的代码,以便在我重新加载网页时显示修改后的数据?



原始码来自:Is it possible to export dash datatable to a specific location on disk or directly to SQL Server?

【问题讨论】:

    标签: plotly dashboard plotly-dash


    【解决方案1】:

    啊,好问题。

    为此,请将 app.layout 设置为一个函数。然后它应该在您刷新时评估该函数,并在这样做时拉入更新的保存下来的数据。

    即下面的layout_function:

    import dash
    import dash_table
    import dash_html_components as html
    from dash.dependencies import Input, Output, State
    import pandas as pd
    from dash.exceptions import PreventUpdate
    
    #df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/solar.csv')
    df = pd.read_csv('H://R//filename.csv')
    
    app = dash.Dash(__name__)
    
    def layout_function():
        
        df = pd.read_csv('H://R//filename.csv')
        
        return html.Div([
                    dash_table.DataTable(
                        id='table',
                        columns=[{"name": i, "id": i} for i in df.columns],
                        data=df.to_dict("rows"),
                        editable=True
                    ),
                    html.Button(id="save-button",children="Save",n_clicks=0),
                    html.Div(id="output-1",children="Press button to save changes")
                    ])
    
    app.layout = layout_function
     
    @app.callback(
            Output("output-1","children"),
            [Input("save-button","n_clicks")],
            [State("table","data")]
            )
          
    def selected_data_to_csv(nclicks,table1): 
        if nclicks == 0:
            raise PreventUpdate
        else:
            pd.DataFrame(table1).to_csv('H://R//filename.csv',index=False)
            return "Data Submitted"
    
    if __name__ == '__main__':
        app.run_server(debug=True)
    

    【讨论】:

      猜你喜欢
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2021-01-07
      相关资源
      最近更新 更多