使用 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 的表,它包含 dateamount 字段。我们可以添加以下代码从数据库获取数据:

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 和数据可视化的实现过程。继续探索和实践,你会发现更多有趣的应用场景!