【问题标题】:Changes in Instances in 'view.py' won't reflect in pages in Flask“view.py”中实例的变化不会反映在 Flask 的页面中
【发布时间】:2019-01-11 14:47:36
【问题描述】:

我在“view.py”程序(HTML 重定向器)中创建了一个线程,负责更新包含来自数据库的数据的实例。这个想法是在这些实例中每 15 秒刷新一次来自 DB 的数据,因此当用户刷新 HTML 页面时,数据是可用的。

代码:

#defining the Thread Function
def set_global_vars():
while True:
    global  ALL_SERVERS_FROM_DB
    time.sleep(15)
    ALL_SERVERS_FROM_DB = ServersManipulator(Server().query_all())       

set_vars_thread = threading.Thread(target=set_global_vars)
set_vars_thread .start()   

# Redirecting to servers page uging ALL_SERVERS_FROM_DB
@page.route('/servers', methods=['GET', 'POST'])
def servers(server='ALL'):
    return render_template('servers.html', server_man=ALL_SERVERS_FROM_DB, server=server)

问题是如果我添加一个应该影响“ALL_SERVERS_FROM_DB”的新条目,它不会反映在使用此实例填充表的 HTML 页面上。

希望我很清楚,有人可以帮助我。

亲切的问候

【问题讨论】:

  • 如果您重新加载页面,数据是否会显示更新?
  • @DoctorAgon 不,这正是我的问题 :)

标签: python multithreading web flask flask-sqlalchemy


【解决方案1】:

嗯, 事实证明,每次从 DB 查询时,我都必须重新创建 DB Engine 会话,否则,它似乎使用了某种缓存。

    def query_all(self):
    """
    Purpose:
        Retrieves all entries related to this Class from Database 
    Parameters:
    """
    global DBSession
    DBSession = sessionmaker(bind=DBENGINE)() #  <- I've added this to work 
    result = DBSession.query(type(self)).order_by(type(self).id)
    DBSession.close()
    return result

之前我只是在实例化对象时启动 DBsession。

问候

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 2019-11-27
    • 1970-01-01
    • 2019-12-21
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多