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

如何强制Flask在每次GET请求时查询数据库?数据库变更不生效求助

解决Flask中数据库修改后页面不实时更新的问题

我来帮你搞定这个问题!页面刷新看不到最新数据,大概率是数据库事务没正确提交或者全局复用游标/连接导致缓存了旧数据,下面是具体的修复方案:

1. 确保数据库事务正确提交

像MySQL这类数据库默认开启事务,如果外部修改数据库后没提交,或者Flask应用的连接处于未提交的事务中,就会读取到旧的数据快照。你可以这么处理:

  • 全局设置连接自动提交:
# 在初始化数据库连接的代码里添加这一行
dbconnection.autocommit(True)
  • 或者在每次查询前手动提交事务:
@app.route('/read')
def db_read():
    # 提交未完成的事务,确保读取最新数据
    dbconnection.commit()
    dbcursor.execute('SELECT * FROM books;')
    result = dbcursor.fetchall()
    return render_template('read.html', result=result)

2. 避免全局复用游标,每次请求创建新游标

全局游标可能会缓存之前的查询结果,建议每次请求都创建新的游标,还能避免资源泄漏:

@app.route('/read')
def db_read():
    # 用with语句自动管理游标生命周期
    with dbconnection.cursor() as dbcursor:
        dbcursor.execute('SELECT * FROM books;')
        result = dbcursor.fetchall()
        return render_template('read.html', result=result)

3. 确认外部修改操作已提交

如果你是用Navicat、phpMyAdmin这类工具修改数据库,一定要确认修改后点击了提交按钮,不然数据库本身的事务没完成,Flask自然读不到新数据。

4. 调试模式排查(可选)

虽然概率很低,但如果开启了DEBUG=True,可以暂时关闭调试模式测试一下,排除调试模式下的缓存干扰。

验证方法

修改代码后重启一次服务器,接着修改数据库内容,刷新/read页面,就能看到最新的数据啦!

内容的提问来源于stack exchange,提问作者kelotich_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:55:11