在Dash App中无法从PostgreSQL查询结果中绘制图形

时间:2018-06-25 11:10:26

标签: postgresql heroku plotly-dash

我正在尝试编写一个简单的代码,以简单地在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

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

注意:由于先前的草案非常模糊,没有任何代码可言,因此对该问题进行了重大修改。

1 个答案:

答案 0 :(得分:0)

示例:

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')