使用 Flask 读取 MySQL 数据并绘图的完整指南
在本教程中,我们将学习如何使用 Flask 框架从 MySQL 数据库读取数据并绘制图表。通过这个过程,你将理解 Flask 应用的基本结构,如何连接到 MySQL 数据库,以及如何利用图表库将数据可视化。
整体流程
在开始之前,我们需要明确整个流程。下面的表格展示了实现的各个步骤:
步骤 | 描述 |
---|---|
1 | 安装所需库 |
2 | 连接 MySQL 数据库 |
3 | 从数据库读取数据 |
4 | 使用 Flask 创建 Web 应用 |
5 | 渲染图表并显示数据 |
6 | 运行应用并查看结果 |
步骤详解
1. 安装所需库
首先,你需要安装 Flask 和 MySQL 的 Python 连接库。可以使用 pip 来安装这些库。在终端中运行以下命令:
pip install Flask Flask-MySQLdb matplotlib
解释:
Flask
:Web 框架,用于创建应用。Flask-MySQLdb
:Flask 的 MySQL 数据库扩展,用于连接和操作 MySQL。matplotlib
:绘图库,用于绘制图表。
2. 连接 MySQL 数据库
接下来,我们需要连接到 MySQL 数据库。创建一个新的 Python 文件(例如 app.py
),并添加以下代码:
from flask import Flask, render_template
from flask_mysqldb import MySQL
app = Flask(__name__)
# 配置 MySQL 数据库
app.config['MYSQL_HOST'] = 'localhost' # MySQL 服务器地址
app.config['MYSQL_USER'] = 'your_username' # MySQL 用户名
app.config['MYSQL_PASSWORD'] = 'your_password' # MySQL 密码
app.config['MYSQL_DB'] = 'your_database' # 数据库名称
mysql = MySQL(app)
解释:
- 我们首先导入 Flask 和 Flask-MySQLdb 库,并创建一个 Flask 应用实例
app
。 - 然后配置数据库连接信息,包括主机、用户名、密码和数据库名。
3. 从数据库读取数据
现在,我们需要从 MySQL 数据库中至少读取一些数据,以便绘制图表。假设我们有一个名为 sales
的表,它包含 date
和 amount
字段。我们可以添加以下代码从数据库获取数据:
import pandas as pd
@app.route('/')
def index():
cur = mysql.connection.cursor()
cur.execute('SELECT date, amount FROM sales')
results = cur.fetchall()
cur.close()
# 将查询结果转换为 pandas DataFrame
df = pd.DataFrame(results, columns=['date', 'amount'])
return render_template('index.html', tables=[df.to_html(classes='data')])
解释:
cursor
用于执行 SQL 查询。fetchall()
方法将所有结果取出,并存储在results
中。- 使用
pandas
将结果转换为 DataFrame,以便于后续处理。
4. 使用 Flask 创建 Web 应用
接下来,我们需要设置一个模板来显示数据。在项目目录中创建一个名为 templates 的文件夹,并在其中创建 index.html
文件。以下是基本结构:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sales Data</title>
</head>
<body>
Sales Data
<div>
{{ tables|safe }}
</div>
</body>
</html>
解释:
- 使用 HTML 来构建页面结构,并在
<div>
中显示数据。 {{ tables|safe }}
语法用于插入 DataFrame 转换的表格。
5. 渲染图表并显示数据
接下来,我们将在 Flask 应用中绘制图表。我们将在 index
函数中添加绘制图表的代码:
import matplotlib.pyplot as plt
import os
@app.route('/plot')
def plot():
cur = mysql.connection.cursor()
cur.execute('SELECT date, amount FROM sales')
results = cur.fetchall()
cur.close()
# 数据准备
dates = [result[0] for result in results]
amounts = [result[1] for result in results]
# 绘制图表
plt.figure()
plt.plot(dates, amounts, marker='o')
plt.title('Sales over Time')
plt.xlabel('Date')
plt.ylabel('Amount')
# 保存图表
plot_path = os.path.join('static', 'plot.png')
plt.savefig(plot_path)
plt.close()
return render_template('plot.html', plot_url=plot_path)
解释:
- 在此处,我们重新查询数据库以获取数据。
- 使用
matplotlib
绘制销售额随时间变化的折线图。 - 最后将图表保存到
static
文件夹中,并在新的模板plot.html
中呈现。
创建该模板 plot.html
文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sales Plot</title>
</head>
<body>
Sales Plot
<img src="{{ plot_url }}" alt="Sales Plot">
<a rel="nofollow" href="/">Back to Data</a>
</body>
</html>
解释:
- 显示图表并提供返回数据页面的链接。
6. 运行应用并查看结果
最后,确保在 Python 文件末尾添加以下代码以运行应用:
if __name__ == '__main__':
app.run(debug=True)
解释:
- 该代码块使 Flask 应用在开发模式下运行,这样你可以在浏览器中查看结果。
ER 图示例
以下是 MySQL 数据库的简单 ER 图:
erDiagram
SALES {
INT id
DATE date
FLOAT amount
}
结论
通过以上步骤,你成功构建了一个简单的 Flask 应用,从 MySQL 数据库中读取数据并绘制图表。这一过程不仅让你了解了如何使用 Flask、MySQL 和绘图库,还展示了如何整合这些技术来创建数据可视化应用。
希望这个教程能帮助你更深入地理解 Flask 和数据可视化的实现过程。继续探索和实践,你会发现更多有趣的应用场景!