Я пытаюсь отобразить данные из базы данных 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)