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

Postgres数据实时更新求助:Flask/Dash仪表板无法自动刷新

解决Flask仪表板需重启才能更新Postgres数据的问题

核心原因是数据查询逻辑只在Flask启动时执行了一次,后续请求复用了旧的DataFrame,没有重新拉取最新数据。以下是几种解决方法:

  • 每次请求重新查询数据库
    将数据查询代码移到视图函数内部,确保每次请求都从数据库获取最新数据:

    @app.route('/dashboard')
    def dashboard():
        # 从配置文件读取数据库凭证
        with open('pg_config.json') as f:
            pg_config = json.load(f)
        # 建立连接并查询
        conn = psycopg2.connect(**pg_config)
        df = pd.read_sql_query("SELECT * FROM your_target_table", conn)
        conn.close()
        # 后续图表生成、模板渲染逻辑
        return render_template('dashboard.html', df=df)
    
  • 使用数据库连接池优化性能
    频繁创建数据库连接会影响性能,可通过连接池复用连接,以SQLAlchemy为例:

    from flask_sqlalchemy import SQLAlchemy
    import json
    
    app = Flask(__name__)
    # 从配置文件加载数据库连接信息
    with open('pg_config.json') as f:
        pg_config = json.load(f)
    db_uri = f"postgresql://{pg_config['user']}:{pg_config['password']}@{pg_config['host']}:{pg_config['port']}/{pg_config['dbname']}"
    app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
    db = SQLAlchemy(app)
    
    @app.route('/dashboard')
    def dashboard():
        # 每次请求通过连接池获取连接查询数据
        df = pd.read_sql_table('your_target_table', db.engine)
        # 处理数据并渲染
        return render_template('dashboard.html', df=df)
    
  • Dash集成场景:回调触发时重新查询
    如果是Flask集成Dash的仪表板,确保回调函数每次触发都重新拉取数据:

    from dash import Dash, dcc, html, Input, Output, callback
    import psycopg2
    import pandas as pd
    import plotly.express as px
    import json
    
    app = Flask(__name__)
    dash_app = Dash(server=app, url_base_pathname='/dashboard/')
    
    # 定义Dash布局
    dash_app.layout = html.Div([
        dcc.Interval(id='interval-component', interval=5*1000, n_intervals=0),
        dcc.Graph(id='update-chart')
    ])
    
    @callback(Output('update-chart', 'figure'),
              Input('interval-component', 'n_intervals'))
    def update_graph(n):
        # 每次回调重新查询数据
        with open('pg_config.json') as f:
            pg_config = json.load(f)
        conn = psycopg2.connect(**pg_config)
        df = pd.read_sql_query("SELECT * FROM your_target_table", conn)
        conn.close()
        # 生成最新图表
        fig = px.line(df, x='date_col', y='value_col')
        return fig
    
  • 缓存机制调整(如果使用了缓存)
    若用了flask-caching,需设置合理的缓存过期时间,或在数据变更时主动清除缓存:

    from flask_caching import Cache
    
    cache = Cache(app, config={'CACHE_TYPE': 'SimpleCache', 'CACHE_DEFAULT_TIMEOUT': 300})
    
    @app.route('/dashboard')
    @cache.cached(timeout=300)  # 设置5分钟自动过期
    def dashboard():
        # 查询数据逻辑
        ...
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:35:28