Python Flask模板查询MySQL数据不随数据库变更刷新问题求助
问题成因
你当前的问题核心是数据查询逻辑的执行时机错误,和Flask缓存、数据库缓存没有关系:
- 你将查询代码写在了
Scripts/db_get.py的模块顶层,当Flask应用启动、首次导入该模块时,查询语句就会执行一次,结果被保存在db_application_result这个全局变量中,后续所有请求访问的都是启动时查询到的静态旧值,不会重新触发数据库查询。 - 你写的
connection.close没有加括号,属于只引用方法没有实际执行,连接并没有被正确关闭,但这不是数据不更新的核心原因。
解决方案
将数据查询逻辑封装为可重复调用的函数,每次请求触发时再执行查询拉取最新数据:
1. 修改Scripts/db_get.py代码
from sqlalchemy import create_engine, select, MetaData, Table # 数据库引擎、表元数据可以全局初始化,无需每次查询重复创建,减少性能开销 engine = create_engine("mysql+mysqldb://username:password@localhost:3306/dbname") metadata = MetaData() table = Table( 'applications', metadata, autoload=True, autoload_with=engine ) stmt = select([table.columns.id, table.columns.name, table.columns.description, table.columns.overallstatus, table.columns.active ]) # 封装查询函数,每次调用才执行查询逻辑 def get_application_data(): # 使用with上下文管理自动关闭连接,无需手动调用close with engine.connect() as conn: return conn.execute(stmt).fetchall()
2. 修改路由代码
# 提前导入查询函数,不要在路由内部做导入 from Scripts.db_get import get_application_data @app.route('/test') def test(): # 每次请求时调用函数,拉取最新的数据库数据 db_application_result = get_application_data() return render_template('test.html', db_application_result=db_application_result)
可选优化
如果接口访问量较高,不需要每次请求都查库,可以引入业务层缓存:
- 安装
Flask-Caching组件,给查询函数设置合理的缓存过期时间(例如5秒),在保证数据时效性的同时降低数据库压力。 - 如果后续使用SQLAlchemy ORM,注意设置合理的事务隔离级别,避免长事务导致读不到最新数据。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

