在Python Flask App中将数据填充到Pygal图表中

时间:2019-02-26 09:35:58

标签: python pandas flask azure-sql-database pygal

我一直在尝试学习如何创建Flask Web Apps以及如何从Azure SQL数据库读取数据。最终目标是将数据库表中的数据绘制为屏幕上的图表。我能够从数据库中检索数据,将其写入Pandas数据框,然后将图表(使用Pygal)呈现到页面上。

我不了解的是如何将数据框中的数据填充到图表中?

运行代码时,我的print(df)打印表的内容:

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
                 loaded_ts  quantity
0  2019-02-20 11:22:40.857         2
1  2019-02-20 11:23:10.760         2
2  2019-02-20 11:23:46.587         4
3  2019-02-20 11:25:10.183         3
4  2019-02-20 11:25:39.220         1
5  2019-02-21 09:50:04.667         4
6  2019-02-21 14:52:38.060         3
7  2019-02-21 15:52:56.750         5
8  2019-02-21 16:16:44.233         5
9  2019-02-21 16:19:09.193         1
10 2019-02-21 16:21:18.963        20
11 2019-02-22 15:11:22.053         3
12 2019-02-23 16:02:23.643         3
13 2019-02-23 16:03:03.573         1
14 2019-02-23 19:02:44.467         1
15 2019-02-21 09:42:38.390         1
16 2019-02-21 09:43:13.543         4
17 2019-02-21 19:36:56.313         1
18 2019-02-21 14:38:23.990         5
19 2019-02-21 14:38:35.870         6
20 2019-02-21 14:41:59.570         1
21 2019-02-21 14:42:08.890         3
22 2019-02-21 15:46:30.323         5
23 2019-02-21 15:10:05.033         3
24 2019-02-21 15:46:13.167         3

main.py的内容如下所示。

from flask import Flask, render_template
import pandas as pd
import pandas.io.sql as psql
from os import getenv
import pymssql
import pygal

server = "SERVER"
user = "USER"
password = "PASSWORD"

conn = pymssql.connect(server, user, password, "DB", port=1433)
cursor = conn.cursor()

app = Flask(__name__)

@app.route('/')
def db_route():

    # create query to table
    sql_query = "SELECT loaded_ts, quantity FROM dbo.QUANTITIES"

    # fill dataframe
    df = psql.read_sql(sql_query, conn)
    df.columns = ["loaded_ts", "quantity"]
    print(df)   # printing df content to console

    bar_chart = pygal.Bar()

    bar_chart = bar_chart.render_data_uri()
    return render_template('index.html', 
                          chart=bar_chart)


if __name__ == '__main__':
    app.run()

我知道我缺少以下行数据框中填充图表的部分:

  

bar_chart = pygal.Bar()

但是我只是不知道如何。 HTML页面会将图表呈现到:

<!DOCTYPE html>
<html>
  <head>
    <title>My App</title>
  </head>
  <body>
    <div id="chart">
      <embed type="image/svg+xml" src= {{ chart|safe }} />
   </div>
  </body>
</html>

当前正在显示轴并说“无数据”(这是意料之中的,因为我不知道如何填充数据。

感谢您的帮助! / K

0 个答案:

没有答案