Как отобразить данные из postgreSQL в dashtable, используя da sh python? - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь отобразить данные из базы данных postgreSQL в dash_table, используя python da sh. Кажется, у меня есть проблема с настройкой обратного вызова. Я мог бы использовать некоторую помощь в этом.

Я могу отобразить другие компоненты из базы данных, кроме data_table, я думаю, что проблема заключается в функциональности обратного вызова, потому что я получаю эту ошибку

dash.exceptions.InvalidCallbackReturnValue: Invalid number of output values for ..data-table.data...state.value...
 Expected 2 got 42

Ниже приведен код, который у меня есть:

import ....

from dash.dependencies import Input, Output

conn = psycopg2.connect('dbname = ***** user = ***** password = **** host = *.*.*.*')
period = conn.cursor()
module = conn.cursor()
table = conn.cursor()

data = conn.cursor()

period.execute("SELECT period from statistic")
periods = set(period.fetchall())

module.execute("SELECT module from statistic")
modules = set(module.fetchall())

table.execute("SELECT query.table from query")
tables = set(table.fetchall())

app = dash.Dash(__name__)

app.config.suppress_callback_exceptions = True

app.layout = html.Div(
    style={ 'fontFamily':"Ubuntu", 'textAlign':'center' },
    children=[
    html.Div(className="row", children=[
        html.Div(className="six columns", children=[
            html.H2('Extraction : db_visualization'),
        ]),
        html.Div(className="six columns", children=[
            html.A([
                html.H6('Name')
            ], href='http://name.com/', style={'text-decoration':'none', 'color':'#990000'})
        ]),
    ]),
    html.Div(className="row", children=[
        html.Div(className="four columns", children=[
            html.H5('Module'),
            dcc.Dropdown(
                id='ext-module',
                options=[{'label':module[0], 'value':module[0]} for module in modules],
                value='aprium'
            )
        ]),
        html.Div(className="four columns", children=[
            html.H5('Period'),
            dcc.Dropdown(
                id='ext-period',
                options=[{'label':period[0], 'value':period[0]} for period in periods],
                value='march'
            )
        ]),
        html.Div(className="four columns", children=[
            html.H5('Table'),
            dcc.Dropdown(
                id='ext-table',
                options=[{'label':table[0], 'value':table[0]} for table in tables],
                value='subdomain'
            )
        ])
    ]),
    dash_table.DataTable(
        id='data-table',
    )
])

@app.callback(
    [Output('data-table', 'data'), Output('state', 'value')],
    [Input('ext-table', 'value') ]
)

def update_table(value):
    data.execute("SELECT * from query where query.table = '{}'".format(value))
    results = data.fetchall()
    return results

server = app.server

if __name__ == '__main__':
    app.run_server(host="0.0.0.0", debug=True)
...