'view.py'中实例的更改不会反映在Flask中的页面中

时间:2019-01-11 14:47:37

标签: python multithreading web flask flask-sqlalchemy

我在'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页面上。

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

亲切问候

1 个答案:

答案 0 :(得分:1)

好吧, 事实证明,每次我从数据库查询时,我都必须重新创建数据库引擎会话,否则,它似乎使用了某种缓存。

    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。

致谢