以下是一个使用Bokeh和Flask实现数据库更新时更新图表的示例代码:
from flask import Flask, render_template, request
from bokeh.plotting import figure
from bokeh.embed import components
from bokeh.models import ColumnDataSource
from bokeh.layouts import row
from sqlalchemy import create_engine
import pandas as pd
app = Flask(__name__)
# 创建数据库连接
engine = create_engine('your_database_connection_string')
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
# 获取表单提交的数据
data = request.form.get('data')
# 将数据插入到数据库中
conn = engine.connect()
conn.execute("INSERT INTO your_table_name (data) VALUES (%s)", (data,))
conn.close()
# 从数据库中获取最新的数据
conn = engine.connect()
result = conn.execute("SELECT * FROM your_table_name")
df = pd.DataFrame(result.fetchall(), columns=result.keys())
conn.close()
# 创建图表
source = ColumnDataSource(data=dict(x=df['data'], y=df['count']))
p = figure(title='数据更新图表', x_axis_label='数据', y_axis_label='计数')
p.vbar(x='x', top='y', width=0.5, source=source)
script, div = components(p)
return render_template('index.html', script=script, div=div, data=df.to_html(index=False))
if __name__ == '__main__':
app.run(debug=True)
在上述代码中,我们首先创建了一个Flask应用,并创建了一个数据库连接。然后,在主页上使用一个表单来提交数据,并将提交的数据插入到数据库中。接下来,我们从数据库中获取最新的数据,并使用Bokeh创建一个柱状图。最后,我们将生成的图表的JavaScript代码和HTML代码传递给前端页面进行渲染。
同时,我们还需要创建一个名为index.html
的模板文件,用于渲染前端页面。以下是一个简单的index.html
模板示例:
Bokeh - 数据库更新时更新图表
Bokeh - 数据库更新时更新图表
最新数据:
{{ data | safe }}
图表:
{{ div | safe }}
{{ script | safe }}
在上述模板中,我们使用了Bokeh的JavaScript和CSS文件,以及Flask的模板语法来渲染数据和图表。
请根据实际情况修改代码中的数据库连接字符串、表名和字段名等内容。