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'
# 监听端口号,默认3306
PORT = 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 config
from 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:5000
Press CTRL+C to quit
通过运行日志可以看出,将数据表都创建了。
第一次运行创建完表后,如果后期再启动,会跳过创建。
更新数据表
在Flask中使用MySQL数据库,当Models发生变更时,更新表结构是常规性的操作。
安装包:
pip install flask-migrate==4.0.4
在app.py文件中导入并添加Migrate:
from flask_migrate import Migrate
migrate = 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”即可获取源码!
文章就分享到这儿,喜欢就点个赞吧!