echarts ajax更新数据库,flask+sqlite3+echarts3+ajax 异步更新数据

结构:

/www

|

|-- /static

|....|-- jquery-3.1.1.js

|....|-- echarts.js(echarts3是单文件!!)

|

|-- /templates

|....|-- index.html

|

|-- app.py

|

|-- create_db.py

一、先准备数据

# 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()

二、定义路由

第一次性加载六条数据

以后,每隔1秒更新一条数据

由如下函数实现:

@app.route("/weather", methods=["GET","POST"])

def weather():

if request.method == "GET":

res = query_db("SELECT * FROM weather WHERE id <= 6") #不妨设定:第一次只返回6个数据

elif request.method == "POST":

res = query_db("SELECT * FROM weather WHERE id = (?)", args=(int(request.form['id'])+1,)) #以后每次返回1个数据

#res = query_db("SELECT * FROM weather WHERE id = 13") # 一个不存在的记录

return jsonify(month = [x[1] for x in res],

evaporation = [x[2] for x in res],

precipitation = [x[3] for x in res]) # 返回json格式

此函数用于处理ajax,返回json格式。形如:

{

month: ['1月','2月',...],

evaporation: [3.1, 4, 4.6, ...],

precipitation: [...]

}

完整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=["GET","POST"])

def weather():

if request.method == "GET":

res = query_db("SELECT * FROM weather WHERE id <= 6") #不妨设定:第一次只返回6个数据

elif request.method == "POST":

res = query_db("SELECT * FROM weather WHERE id = (?)", args=(int(request.form['id'])+1,)) #以后每次返回1个数据

#res = query_db("SELECT * FROM weather WHERE id = 13") # 一个不存在的记录

return jsonify(month = [x[1] for x in res],

evaporation = [x[2] for x in res],

precipitation = [x[3] for x in res]) # 返回json格式

if __name__ == "__main__":

app.run(debug=True)

三、使用echarts

官网对eccharts 3数据动态更新的描述:

···

数据的动态更新

ECharts 由数据驱动,数据的改变驱动图表展现的改变,因此动态数据的实现也变得异常简单。

所有数据的更新都通过 setOption实现,你只需要定时获取数据,setOption 填入数据,而不用考虑数据到底产生了那些变化,ECharts 会找到两组数据之间的差异然后通过合适的动画去表现数据的变化。

> ECharts 3 中移除了 ECharts 2 中的 addData 方法。如果只需要加入单个数据,可以先 data.push(value) 后 setOption

···

index.html文件如下:

ECharts3 Ajax

//--- 折柱 ---

var myChart = echarts.init(document.getElementById('main'));

myChart.setOption({

title: {

text: '异步数据更新示例'

},

tooltip: {},

legend: {

data:['蒸发量','降水量']

},

xAxis: {

data: []

},

yAxis: {},

series: [{

name: '蒸发量',

type: 'bar',

data: []

},{

name: '降水量',

type: 'line',

data: []

}]

});

// 四个全局变量:月份、蒸发量、降水量、 哨兵(用于POST)

var month = [],

evaporation = [],

precipitation = [],

lastID = 0; // 哨兵,记录上次数据表中的最后id +1(下次查询只要>=lastID)

//准备好统一的 callback 函数

var update_mychart = function (data) { //data是json格式的response对象

myChart.hideLoading(); // 隐藏加载动画

dataLength = data.month.length //取回的数据长度

lastID += dataLength //哨兵,相应增加。

// 切片是能统一的关键!!

month = month.slice(dataLength).concat(data.month) // 数组,先切片、再拼接

evaporation = evaporation.slice(dataLength).concat(data.evaporation.map(parseFloat)) //注意map方法

precipitation = precipitation.slice(dataLength).concat(data.precipitation.map(parseFloat))

// 填入数据

myChart.setOption({

xAxis: {

data: month

},

series: [{

name: '蒸发量', // 根据名字对应到相应的系列

data: evaporation

},{

name: '降水量',

data: precipitation

}]

});

if (dataLength == 0){clearInterval(timeTicket);} //如果取回的数据长度为0,停止ajax

}

myChart.showLoading(); // 首次显示加载动画

// 异步加载数据 (首次,get,显示6个数据)

$.get('/weather').done(update_mychart);

// 异步更新数据 (以后,定时post,取回1个数据)

var timeTicket = setInterval(function () {

$.post('/weather',{id: lastID}).done(update_mychart);

}, 5000);

效果图:

6f9f11354e0c4aab1ab6507c9db727d3.png

flask&plus;sqlite3&plus;echarts3&plus;ajax 异步数据加载

结构: /www | |-- /static |....|-- jquery-3.1.1.js |....|-- echarts.js(echarts3是单文件!!) | |-- /templates ...

Vue 父组件ajax异步更新数据,子组件props获取不到

转载 https://blog.csdn.net/d295968572/article/details/80810349 当父组件 axjos 获取数据,子组件使用 props 接收数据时,执行 mo ...

flask&plus;sqlite3&plus;echarts3 系统监控

总的而言,分三部分: 1.监控器(monitor.py): 每秒获取系统的四个cpu的使用率,存入数据库. 2.路由器(app.py): 响应页面的ajax,获取最新的一条或多条数据. 3.页面(in ...

echarts异步数据加载&lpar;在下拉框选择事件中异步更新数据&rpar;

接触echarts 大半年了,从不会到熟练也做过不少的图表,隔了一段时间没使用这玩意,好多东西真心容易忘了.在接触echarts这期间也没有总结什么东西,今天我就来总结一下如何在echart中异步加载 ...

jQuery选取所有复选框被选中的值并用Ajax异步提交数据

昨天和朋友做一个后台管理系统项目的时候涉及到复选框批量操作,如果用submit表单提交挺方便的,但是要实现用jQuery结合Ajax异步提交数据就有点麻烦了,因为我之前做过的项目中基本上没用Ajax来 ...

09&period;VUE学习之watch监听属性变化实现类百度搜索栏功能ajax异步请求数据&comma;返回字符串

cmd下安装axios npm install axios 安装好后,会多出node_modules文件夹 思路: 监听data里的word改变时,发送ajax异步请求数据, 把返回的数据赋值给dat ...

ajax异步获取数据后动态向表格中添加数据&lpar;行&rpar;

因为某些原因,项目中突然需要做自己做个ajax异步获取数据后动态向表格中添加数据的页面,网上找了半天都没有 看到现成的,决定自己写个例子 1.HTML页面 html> ...

flask&plus;sqlite3&plus;echarts2&plus;ajax数据可视化

前提: 准备Python + Flask+Sqlite3的平台环境(windows系统) 前面一节介绍flask怎么安装了,剩下sqlite3下载后解压,然后环境变量添加解压路径就行了 附加下载地址: ...

随机推荐

【译】Spring 4 Hello World例子

前言 译文链接:http://websystique.com/spring/spring-4-hello-world-example-annotation-tutorial-full-example/ ...

matlab取整 四舍五入

Matlab取整函数有: fix, floor, ceil, round.取整函数在编程时有很大用处.一.取整函数1.向零取整(截尾取整)fix-向零取整(Round towards zero):&g ...

mediawiki的安装与配置

apache的配置: 1. 开启php module 查看mods-enabled/php5.load 是否存在,不存在的话, 就从mods-avaliable中复制一个到mods-enabled中. ...

yii2数据修改&vert;联查

model 层   联查 $con = Yii::$app->db; $re = $con->createCommand("select * from ads LEFT JOIN ...

BZOJ1599&colon; &lbrack;Usaco2008 Oct&rsqb;笨重的石子

1599: [Usaco2008 Oct]笨重的石子 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 758  Solved: 513[Submit][ ...

Unable to load native-hadoop library解决思路

最近试着搭建Hadoop,我使用的操作系统是Centos6.5,Hadoop版本是2.6.0. 在安装过程中总是出现:WARN util.NativeCodeLoader: Unable to loa ...

windows系统下快捷命令

mstsc 远程计算机 regedit 注册表

URL解析器urllib2

urllib2是Python的一个库(不用下载,安装,只需要使用时导入import urllib2)它提供了一系列用于操作URL的功能. urlopen urllib2.urlopen可以接受Requ ...

也许是目前实现最好的js模拟滚动插件

finger-mover 是一个集成 Fingerd(移动端以手指为单位的事件管理方案) 和 Moved(微型运动方案) 为一体的移动端动效平台,finger-mover 本身并不能为你做什么,但是附 ...

C&num;工具&colon;Bootstrap WPF Style&comma;Bootstrap风格的WPF样式

简介 GitHub地址:https://github.com/ptddqr/bootstrap-wpf-style 此样式基于bootstrap-3.3.0,样式文件里的源码行数都是指的这个版本.CS ...

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python Flask,您可以使用Echarts库来动态获取数据库数据并生成交互式图表。 首先,您需要在Flask应用程序引入相应的库和类: ``` from flask import Flask, render_template from pyecharts import Echart, Bar # 选择要使用的Echarts图表类型 from random import randint # 用于生成随机数据 import MySQLdb # 用于连接和操作MySQL数据库 ``` 然后,您需要在Flask应用程序设置数据库连接: ``` def connect_to_database(): db = MySQLdb.connect(host="localhost", user="your_username", password="your_password", database="your_database") return db.cursor() ``` 接下来,您需要在Flask应用程序定义一个路由以获取数据库数据并生成图表: ``` @app.route('/chart') def chart_route(): cursor = connect_to_database() # 连接数据库 cursor.execute("SELECT column1, column2 FROM your_table") # 执行SQL查询 data = cursor.fetchall() # 获取查询结果 x_data = [] y_data = [] for row in data: x_data.append(row[0]) # 将第一列数据添加到x轴数据列表 y_data.append(row[1]) # 将第二列数据添加到y轴数据列表 bar = Bar("动态图表") bar.add("数据", x_data, y_data) # 添加数据到图表 return render_template('echarts.html', chart=bar.render_embed()) ``` 在上面的代码,我们通过查询数据库获取了两列数据,并将其分别存储在x_data和y_data列表。然后,我们使用Echarts的Bar图表类型创建了一个名为"动态图表"的图表,并将数据添加到图表。最后,我们通过render_embed()方法将图表渲染为HTML代码,并将其传递给模板。 最后,您还需要在Flask应用程序添加一个HTML模板文件,例如echarts.html: ``` <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Echarts图表</title> </head> <body> {{ chart }} </body> </html> ``` 以上就是使用Echarts、Python Flask和MySQL数据库动态获取数据并生成图表的简单示例。通过访问/chart路由,您将能够在浏览器看到一个包含动态数据和交互式图表的页面。请根据您的实际需求进行相应的调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值