You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:06:04