Изменения в Экземплярах в «view.py» не будут отражаться на страницах в Flask - PullRequest
0 голосов
/ 11 января 2019

Я создал в своей программе 'view.py' (перенаправитель HTML) поток, отвечающий за обновление моих экземпляров, которые содержат данные из БД. Идея состоит в том, что каждые 15 секунд данные из БД обновляются в этих случаях, поэтому, когда пользователь обновляет 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 голосов
/ 14 января 2019

Ну, Оказывается, я должен воссоздавать сессию БД 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, когда был создан объект.

Привет

...