无法在 Dash 应用程序中根据 PostgreSQL 查询结果绘制图形

Unable To Plot Graph From PostgreSQL Query Results In Dash App

我正在尝试编写一个简单的代码来简单地绘制 x 轴上一些水果名称与相应销售单位的条形图。这段代码的目的只是了解如何通过 dash 应用程序从 heroku 托管数据库查询 postgres 结果。

下面是代码,

from dash import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objs as go
import psycopg2
import os

DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cur = conn.cursor()
cur.execute("SELECT fruits FROM pgrt_table")
fruits1=cur.fetchall()
#print(fruits1)
cur.execute("SELECT sales FROM pgrt_table")
sales1=cur.fetchall()


app = dash.Dash()

app.layout = html.Div(children=[
    html.H1(
        children='Hello Dash'
    ),

    html.Div(
        children='''Dash: A web application framework for Python.'''
    ),

    dcc.Graph(
        id='example-graph',
       figure=go.Figure(
            data=[
                go.Bar(
                x=fruits1, y=sales1, name='SF'),
                #{'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Montréal'},
            ],

            #'layout':{
            #    'title': 'Dash Data Visualization'
            #}
        )
    )
])

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

输出如下,

Output to the above code

对应的输出只是坐标轴,没有条形图。与数据库的连接正在工作,因为打印 fruits1 或 sales1 为我提供了 postgres 中列的值。唯一的问题是绘图。

注意:这个问题已经过大量修改,因为之前的草案非常模糊,没有任何代码可以显示。

示例:

fruits1 = [('apple',), ('banana',),
           ('mango',), ('pineapple',),
           ('peach',), ('watermelon',)]

你的数据库的输出不能直接使用:

xData = [fruit[0] for fruit in fruits1]
# gives ['apple', 'banana', 'mango', 'pineapple', 'peach', 'watermelon']
yData = [sales[0] for sales in sales1]

您必须将数据分配给 go.Bar 对象:

go.Bar(x=xData, y=yData, name='SF')