Flask+pyecharts+SQLAlchemy,统计图的数据存放在mysql中,综合版

文摘   科技   2023-07-19 18:30   北京  


ISEE小语


有人问:“世上最廉价的东西是什么?


在网上看到这样一个回答说:

“大概就是付出吧,一贫如洗的真心、一事无成的温柔、一厢情愿的等待。




回顾上篇


此篇是在【Flask+pyecharts结合,html统计图呈现在前端页面】和【Flask+pyecharts结合,优化前端加导航栏显示】的基础上继续添加的。

所以看此篇前,请先依次看前两篇,更好连续~


Flask+pyecharts结合,html统计图呈现在前端页面

ISEE小栈,公众号:ISEE小栈Flask+pyecharts结合,html统计图呈现在前端页面



Flask+pyecharts结合,优化前端加导航栏显示

ISEE小栈,公众号:ISEE小栈Flask+pyecharts结合,html统计图呈现在前端页面-优化前端加导航栏显示


开始本篇


上篇是在前端页面上加个导航栏。

本次将数据存放在mysql数据库中。



环境:

Pycharm

Python 3.9.16



安装:

pip install Flask==2.3.1

pip install pyecharts==2.0.3

pip install Flask-SQLAlchemy==3.0.5



继上次的Flask项目,往下进行操作:

首先在mysql中新增一个数据库app_flask



新增Mysql配置

项目根目录下,新建config.py

# 主机名HOSTNAME = '127.0.0.1'# 监听端口号,默认3306PORT = 3306# 用户名USERNAME = 'root'# 密码PASSWORD = 'q111111'# 数据库名称DATABASE = 'app_flask'
# 连接数据库SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"# 动态追踪修改设置,如果设置只会提醒警告,不建议开启SQLALCHEMY_TRACK_MODIFICATIONS = False # 查询时会显示原始sql语句SQLALCHEMY_ECHO = True


主要是Mysql连接的信息,和连接数据库操作,单独放在一个配置文件中,方便后期维护。



定义Models

项目根目录下,新建models.py

首先引入SQLAlchemy:

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()


定义数据表:

class Economy(db.Model):    __tablename__ = 'economy'    id = db.Column(db.Integer, primary_key=True)    year = db.Column(db.String(50), nullable=False)    data_one = db.Column(db.Integer, nullable=False)    data_two = db.Column(db.Integer, nullable=False)    data_three = db.Column(db.Integer, nullable=False)

class Weather(db.Model): __tablename__ = 'weather' id = db.Column(db.Integer, primary_key=True) date = db.Column(db.String(50), nullable=False) max_temperature = db.Column(db.Integer, nullable=False) min_temperature = db.Column(db.Integer, nullable=False)

class TestCase(db.Model): __tablename__ = 'testcase' id = db.Column(db.Integer, primary_key=True) date = db.Column(db.Integer, nullable=False) test1 = db.Column(db.Integer, nullable=False) test2 = db.Column(db.Integer, nullable=False) test3 = db.Column(db.Integer, nullable=False) test4 = db.Column(db.Integer, nullable=False)




创建数据表

在app.py文件中导入数据库配置config.py和数据表models.py

import configfrom models import db, Economy, Weather, TestCase


在app.py中连接数据库:

app.config.from_object(config)db.init_app(app)


创建数据库表:

with app.app_context():    db.create_all()

注:

通过with app.app_context(): db.create_all()语句可以创建数据库表,但它不会自动更新已存在的表结构。


db.create_all()方法会根据Models的定义创建数据库表,但它只会创建尚不存在的表。如果已经存在同名的表,db.create_all()方法不会对已存在的表进行修改或更新,而是跳过创建。


运行Flask应用

python app.py


运行日志:

……………………
INFO sqlalchemy.engine.Engine CREATE TABLE economy ( id INTEGER NOT NULL AUTO_INCREMENT, year VARCHAR(50) NOT NULL, data_one INTEGER NOT NULL, data_two INTEGER NOT NULL, data_three INTEGER NOT NULL, PRIMARY KEY (id))

INFO sqlalchemy.engine.Engine [no key 0.00011s] {}INFO sqlalchemy.engine.Engine CREATE TABLE weather ( id INTEGER NOT NULL AUTO_INCREMENT, date VARCHAR(50) NOT NULL, max_temperature INTEGER NOT NULL, min_temperature INTEGER NOT NULL, PRIMARY KEY (id))

INFO sqlalchemy.engine.Engine [no key 0.00015s] {}INFO sqlalchemy.engine.Engine CREATE TABLE testcase ( id INTEGER NOT NULL AUTO_INCREMENT, date INTEGER NOT NULL, test1 INTEGER NOT NULL, test2 INTEGER NOT NULL, test3 INTEGER NOT NULL, test4 INTEGER NOT NULL, PRIMARY KEY (id))

INFO sqlalchemy.engine.Engine [no key 0.00014s] {}INFO sqlalchemy.engine.Engine COMMIT * Serving Flask app 'app.py' * Debug mode: off * Running on http://127.0.0.1:5000Press CTRL+C to quit


通过运行日志可以看出,将数据表都创建了。

第一次运行创建完表后,如果后期再启动,会跳过创建。



更新数据表

在Flask中使用MySQL数据库,当Models发生变更时,更新表结构是常规性的操作。

安装包:

pip install flask-migrate==4.0.4


在app.py文件中导入并添加Migrate:

from flask_migrate import Migratemigrate = Migrate(app, db)


在终端中进入项目目录,并执行命令初始化数据库迁移

flask db init


执行命令生成数据库迁移脚本

flask db migrate -m "Initial migration"


执行命令应用数据库迁移:

flask db upgrade


最后重启Flask应用后,就可以看到Models的变更已经反映在数据库表结构中




以上数据库准备好,自行写入必要的数据,即可!

接下来就是各类统计图取数显示了。



柱状图

在app.py文件下将原先的x_data、y1_data、y2_data、y3_data,改为从数据库取数即可,其他部分的代码不用改变,核心代码如下:

@app.route('/bar', methods=['POST', 'GET'])def bar_page():    economy_: [Economy] = Economy.query.all()    x_data = []    y1_data = []    y2_data = []    y3_data = []    for economy in economy_:        x_data.append(economy.year)        y1_data.append(economy.data_one)        y2_data.append(economy.data_two)        y3_data.append(economy.data_three)        …………        …………        …………


运行Flask应用

python app.py


打开浏览器,输入http://127.0.0.1:5000,点击【柱状图】



折线图

在app.py文件下将原先的x_data、y_data、y2_data,改为从数据库取数即可,其他部分的代码不用改变,核心代码如下:

@app.route('/line', methods=['POST', 'GET'])def line_page():    weather_: [Weather] = Weather.query.all()    x_data = []    y_data = []    y2_data = []    for weather in weather_:        x_data.append(weather.date)        y_data.append(weather.max_temperature)        y2_data.append(weather.min_temperature)        …………        …………        …………


运行Flask应用

python app.py


打开浏览器,输入http://127.0.0.1:5000,点击【折线图】



饼图

在app.py文件下将原先的years、datalist,改为从数据库取数即可,其他部分的代码不用改变,核心代码如下:

@app.route('/pie', methods=['POST', 'GET'])def pie_page():    cases: [TestCase] = TestCase.query.all()    years = []    datalist = []    for case in cases:        years.append(case.date)        sub_data = [['test1', case.test1], ['test2', case.test2], ['test3', case.test3], ['test4', case.test4]]        datalist.append(sub_data)        …………        …………        …………


运行Flask应用

python app.py


打开浏览器,输入http://127.0.0.1:5000,点击【饼图】



总结

本次是将Flask+Mysql结合起来,方便管理统计数据,更接近日常使用!

后面想起什么就加什么吧

项目结构:

test_app_flask:项目名称

sql:数据表结构及测试数据

static:用于存放静态文件,例如CSS、JavaScript和图像文件等

templates:用于存放模板文件,就是html文件

config.py:Mysql连接信息配置文件

models.py:数据表

app.py:用于存放Flask应用程序的主要代码逻辑

requirments.txt:需要安装的包及版本



有需求的朋友点个“”和“在看”,谢谢支持~!

后台回复“pyecharts_flask_mysql”即可获取源码!


     

文章就分享到这儿,喜欢就点个吧!



推荐阅读  点击标题可跳转


ISEE小栈
没有花里胡哨,简单才是王道。
 最新文章