【问题标题】:Generate plotly DataTable from SQL query从 SQL 查询生成 plotly DataTable
【发布时间】:2020-06-06 22:15:57
【问题描述】:

我是 dash 和 python 的新手,我目前正在尝试为datatable 提供一个callback,它从我的计算机上的SQL 检索。 但是,我无法这样做。

知道为什么吗?我收到了这个错误:

columns = [{'num': i, 'id': i} for i in data.columns],data=[]
NameError: name 'data' is not defined

这是我到目前为止所实现的;


import pandas as pd
import dash
import dash_table
from dash.dependencies import Output, Input
import dash_core_components as dcc
import dash_html_components as html
from random import random
import plotly
import pyodbc
global data
def connectSQLServer(driver, server, db):
    connSQLServer = pyodbc.connect(
        r'DRIVER={' + driver + '};'
        r'SERVER=' + server + ';'
        r'DATABASE=' + db + ';'
        r'Trusted_Connection=yes;',
        autocommit=True
    )
    return connSQLServer


app = dash.Dash()

app.layout = html.Div([dash_table.DataTable(id='raw_data',

                                            columns = [{'num': i, 'id': i} for i in data.columns],data=[]
                                            #data = data.to_dict('records')
                                            ),
                       dcc.Interval(id='interval_component',
                                    interval=1000,
                                    n_intervals=0
                                    )
                       ])


@app.callback(Output('raw_data', 'data'), [Input('interval_component', 'n_intervals')])
def update_table(n_intervals):

    dataSQL = []  # set an empty list
    global data
    sql_conn = connectSQLServer(
        'ODBC Driver 13 for SQL Server', 'DESKTOP\SQL', 'display')
    cursor = sql_conn.cursor()
    cursor.execute("SELECT num,ID FROM dbo.stats")
    rows = cursor.fetchall()
    for row in rows:
        dataSQL.append(list(row))
        labels = ['num', 'id']
        data = pd.DataFrame.from_records(dataSQL, columns=labels)
        data = data.to_dict('records')
        return {'data': [data]}


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

【问题讨论】:

    标签: python sql datatable plotly-dash


    【解决方案1】:

    您已将 Output 设置为传递给 data 属性,因此您的返回值应该只是 data 变量,如下所示:

    return data

    通过将其放入字典中,Dash 正在寻找数据 prop 的数据 prop,它不存在,这就是为什么您会收到数据未定义的错误。

    【讨论】:

    • 嗨,我已经尝试过,但仍然出现错误:回溯(最近一次调用最后一次):文件“app.py”,第 26 行,在 列 = [{'num': i, ' id': i} for i in data.columns],data=[] NameError: name 'data' is not defined
    • 你还没有在回调之外定义data,所以用columns=[],data=[]初始化你的表,然后在你的回调中设置columns值并使用多输出传递返回 datacolumns 值。
    • 我试过了,现在我有一个callback error updating raw_data,就像这里:stackoverflow.com/questions/60664563/…
    猜你喜欢
    • 1970-01-01
    • 2012-06-20
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 2012-03-09
    相关资源
    最近更新 更多