flask+sqlite3+echarts2+ajax数据可视化

前提:

准备Python + Flask+Sqlite3的平台环境(windows系统)

前面一节介绍flask怎么安装了,剩下sqlite3下载后解压,然后环境变量添加解压路径就行了

附加下载地址:http://www.sqlite.org/2016/sqlite-tools-win32-x86-3150200.zip

项目的目录结构

/www
|
|-- /static
| |jquery-1.6.2.js (可以是其他jquery-xx.js,在index.html里修改就行了)
| |-- echarts.js(还有echarts原dist目录下的文件(夹))
|
|-- /templates
| |
| |-- index.html
|
|-- app.py
|
|-- create_db.py

  

记得下载:echarts,echarts包含:

# create_db.py
# 只运行一次!!!

import sqlite3

# 连接
conn = sqlite3.connect(‘mydb.db‘)
c = conn.cursor()

# 创建表
c.execute(‘‘‘DROP TABLE IF EXISTS weather‘‘‘)
c.execute(‘‘‘CREATE TABLE weather (month text, evaporation text, precipitation text)‘‘‘)

# 数据
# 格式:月份,蒸发量,降水量
purchases = [(1, 2, 2.6),
             (2, 4.9, 5.9),
             (3, 7, 9),
             (4, 23.2, 26.4),
             (5, 25.6, 28.7),
             (6, 76.7, 70.7),
             (7, 135.6, 175.6),
             (8, 162.2, 182.2),
             (9, 32.6, 48.7),
             (10, 20, 18.8),
             (11, 6.4, 6),
             (12, 3.3, 2.3)
            ]

# 插入数据
c.executemany(‘INSERT INTO weather VALUES (?,?,?)‘, purchases)

# 提交!!!
conn.commit()

# 查询方式一
for row in c.execute(‘SELECT * FROM weather‘):
    print(row)

# 查询方式二
c.execute(‘SELECT * FROM weather‘)
print(c.fetchall())

# 查询方式二_2
res = c.execute(‘SELECT * FROM weather‘)
print(res.fetchall())

# 关闭
conn.close()

建立数据库结果:

     // index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>ECharts Ajax</title>
    <script src="{{ url_for(‘static‘, filename=‘jquery-1.6.2.js‘) }}"></script>
</head>

<body>
    <!--Step:1 为ECharts准备一个具备大小(宽高)的Dom-->
    <div id="main" style="height:500px;border:1px solid #ccc;padding:10px;"></div>

    <!--Step:2 引入echarts.js-->
    <!--<script src="js/echarts.js"></script>-->
    <script src="{{ url_for(‘static‘, filename=‘echarts.js‘) }}"></script>

    <script type="text/javascript">
    // Step:3 为模块加载器配置echarts的路径,从当前页面链接到echarts.js,定义所需图表路径
    require.config({
        paths: {
            echarts: ‘./static‘,
        }
    });

    // Step:4 动态加载echarts然后在回调函数中开始使用,注意保持按需加载结构定义图表路径
    require(
        [
            ‘echarts‘,
            ‘echarts/chart/bar‘, // 按需加载
            ‘echarts/chart/line‘,
        ],
        function (ec) {
            //--- 折柱 ---
            var myChart = ec.init(document.getElementById(‘main‘));

            // 设置---------------------
            var option = {
                tooltip : {
                    trigger: ‘axis‘
                },
                legend: {
                    data:[‘蒸发量‘,‘降水量‘]
                },
                toolbox: {
                    show : true,
                    feature : {
                        mark : {show: true},
                        dataView : {show: true, readOnly: false},
                        magicType : {show: true, type: [‘line‘, ‘bar‘]},
                        restore : {show: true},
                        saveAsImage : {show: true}
                    }
                },
                calculable : true,
                xAxis : [
                    {
                        type : ‘category‘,
                        data : []
                    }
                ],
                yAxis : [
                    {
                        type : ‘value‘,
                        splitArea : {show : true}
                    }
                ],
                series : [
                    {
                        name:‘蒸发量‘,
                        type:‘bar‘,
                        data:[]
                    },
                    {
                        name:‘降水量‘,
                        type:‘line‘,
                        data:[]
                    }
                ]
            };

            $.ajax({
                cache: false,
                type: "POST",
                url: "/weather", //把表单数据发送到/weather
                data: null, // 发送的数据
                dataType : "json",  //返回数据形式为json
                async: false,
                error: function(request) {
                    alert("发送请求失败!");
                },
                success: function(result) {
                    //console.log(result);
                    for (i = 0, max = result.month.length; i < max; i++) { //注意:result.month.length
                        option.xAxis[0].data.push(result.month[i]);
                        option.series[0].data.push(parseFloat(result.evaporation[i]));
                        option.series[1].data.push(parseFloat(result.precipitation[i]));
                    };

                    // 为echarts对象加载数据--------------
                    myChart.setOption(option);
                }
            });
            // 为echarts对象加载数据--------------
            //myChart.setOption(option);
        }
    );
    </script>
</body>
</html>

 

# app.py

import sqlite3
from flask import Flask, request, render_template, jsonify

app = Flask(__name__)

def get_db():
    db = sqlite3.connect(‘mydb.db‘)
    db.row_factory = sqlite3.Row
    return db

def query_db(query, args=(), one=False):
    db = get_db()
    cur = db.execute(query, args)
    db.commit()
    rv = cur.fetchall()
    db.close()
    return (rv[0] if rv else None) if one else rv

@app.route("/", methods=["GET"])
def index():
    return render_template("index.html")

@app.route("/weather", methods=["POST"])
def weather():
    if request.method == "POST":
        res = query_db("SELECT * FROM weather")

    return jsonify(month = [x[0] for x in res],
                   evaporation = [x[1] for x in res],
                   precipitation = [x[2] for x in res])

if __name__ == "__main__":
  app.run(debug=True)

运行后:

打开:http://127.0.0.1:5000/

时间: 2024-10-12 02:55:44

flask+sqlite3+echarts2+ajax数据可视化的相关文章

flask+sqlite3+echarts2+ajax数据可视化报错:UnicodeDecodeError: &#39;utf8&#39; codec can&#39;t decode byte解决方法

flask+sqlite3+echarts2+ajax数据可视化报错: UnicodeDecodeError: 'utf8' codec can't decode byte 解决方法: 将 py文件和html文件用用记事本打开,然后另存为,将编码ANSI改成:UTF-8 flask+sqlite3+echarts2+ajax数据可视化报错:UnicodeDecodeError: 'utf8' codec can't decode byte解决方法

ECharts, PHP, MySQL, Ajax, JQuery 实现前后端数据可视化

ECharts 下载js代码 工作原理浅析 在项目中引入ECharts 后台处理 数据库端MySQL PHP端 JQuery Ajax处理 ECharts 端处理 前端全部代码 演示结果 总结 最近要将后台数据库上的一些数据以可视化的方法显示到前端,找来找去,发现百度开发的这套图表工具库还不错,网上搜索了一下相关的教程,也算是实现了较为简单的demo.于是写下来,记录一下. ECharts ECharts是国人开发的一套前端的图表工具库,使用起来超方便,也很简单(当然了,前提是理解了其工作原理之

Flask+Echarts实现数据可视化(一)

任务说明: 基于Flask-SQLAlchemy框架编写数据库映射模型,完成数据库表结构映射模型. 编写可视化后台处理程序,按照三个数据统计图表的数据格式进行数据封装,并将封装后的数据传递到Jinja2模板的自定义变量中. 在前端页面中,使用Jinja2模板引擎获取相关统计图表数据并传递给前端页面中相应的echarts组件. 运行程序,访问本地可视化网页URL,查看数据可视化Web页面. 完成echarts_front.html文件的以下函数编码实现如下功能: 将2018最受欢迎的10个网站及其

CSDN开源夏令营 百度数据可视化实践 ECharts(6) 期中总结

期中总结 (1)首先感谢林峰老师的辛勤指导!! 通过半个多月的培训,林峰老师讲解了ECharts总体框架和其中各个部分:图类.组件.接口.基础库的具有应用方法和应该把握的细节,并通过实际的例子熟悉和掌握各个控件.只有打牢基础才能正正的为下步的工作做好准备,熟练的属性代码的编程技巧,才能做出更好的专题. (2)第一次任务重点总结: 要求:了解ECharts特性中列举的每一项特性,并能找到实例中的例子,并且在实例中操作. 重点问题: 1)ECharts一种支持多少种图表?有多少个组件?列举出中英文名

跟风舞烟学大数据可视化-Echarts从入门到上手实战

跟风舞烟学大数据可视化-Echarts从入门到上手实战 课程观看地址:http://www.xuetuwuyou.com/course/180 课程出自学途无忧网:http://www.xuetuwuyou.com 课程讲师:风舞烟 课时数:三个模块,共70课时   一.课程特色: 1.最全的Echarts课程讲解     70学时课时量,360度全方位,无死角的课程设计,让你通透Echarts可视化技术 2.最适合小白学员学习的课程,没有之一     只要你了解一点基本的Html,CSS,Ja

55种开源数据可视化工具简介

55种开源数据可视化工具简介 雪姬 2015-04-21 11:47:56 数据可视化 评论(2)   数据时代数据可视化成为理解和表达数据的有效甚至是唯一的手段. 一共56个,盘点最实用的大数据可视化分析工具 工欲善其事必先利其器,本文对55个流行的数据可视化工具开源协议,主页,文档,案例等资源的进行简单介绍,其中包括著名的D3.js,R,Gephi,Raphaël,Processing.js,Tableau Public,Google Chart Tools,Arbor.js等,资料来源ht

用ElasticSearch和Protovis实现数据可视化

搜索引擎最重要的目的,嗯,不出意料就是搜索.你传给它一个请求,然后它依照相关性返回你一串匹配的结果.我们可以根据自己的内容创造各种请求结构,试验各种不同的分析器,搜索引擎都会努力尝试提供最好的结果. 不过,一个现代的全文搜索引擎可以做的比这个更多.因为它的核心是基于一个为了高效查询匹配文档而高度优化过的数据结构——倒排索引.它也可以为我们的数据完成复杂的聚合运算,在这里我们叫它facets.(不好翻译,后文对这个单词都保留英文) facets通常的目的是提供给用户某个方面的导航或者搜索. 当你在

CSDN开源夏令营 百度数据可视化实践 ECharts(4)

ECharts知识点总结: 在应用过程中总会遇到一些难以理解的概念和属性,这里就总结了一下比较难的知识点,方便理解概念,进而更好的掌握ECharts. (1)1.  一个完整的option包含什么?可以归纳为几类? 下图中颜色已经区分出了三类分别是:公共选项 , 组件选项 , 数据选项 名称 描述 {color}backgroundColor 全图默认背景,(详见backgroundColor),默认为无,透明 {Array} color 数值系列的颜色列表,(详见color),可配数组,eg:

百度数据可视化图表套件echart实战

最近我一直在做数据可视化的前端工作,我用的最多的绘图工具是d3.d3有点像photoshop,功能很强大,例子也很多,但是学习成本也不低,做项目是需要较大人力投入的.3月底由在亚马逊工作的同学介绍下使用了一下echart,一个由百度前端发起的canvas国产类库(官网:http://echarts.baidu.com/index.html).这个echart其实是在canvas类库zrender的基础上做的主题图库,优点有数据驱动,图例丰富,功能强大,支持数据拖拽重计算,数据区域漫游,全中文文档