Ожидание MySQL выполнения перед рендерингом шаблона - PullRequest
0 голосов
/ 06 марта 2020

Я использую Flask и MySQL. У меня проблема с обновленными данными , а не , отображаемыми после выполнения.

В настоящее время я удаляю и перенаправляю обратно на страницу администратора, чтобы затем иметь обновленную версию веб-сайта. Тем не менее, я все еще получаю старые записи, которые отображаются в таблице, которую я имею в начале. После обновления вручную все работает нормально. Иногда проблема также возникает с данными, которые вообще не отправляются во внешний интерфейс в результате того, что шаблон обрабатывается быстрее, чем выполнение MySQL, и пустой список отправляется вперед, я полагаю.

На Python у меня есть:

@app.route("/admin")
def admin_main():
    query = "SELECT * FROM categories"
    conn.executing = True
    results = conn.exec_query(query)

    return render_template("src/admin.html", categories = results)


@app.route('/delete_category', methods = ['POST'])
def delete_category():
    id = request.form['category_id']
    query = "DELETE FROM categories WHERE cid = '{}'".format(id)
    conn.delete_query(query)
    return redirect("admin", code=302)

admin_main - главная страница. Я попытался добавить какую-то семафорную систему, выполнение только после того, как «conn.executing» станет ложным, но это тоже не сработало. Я также попытался поиграться с asyn c и подождать, но не повезло («Функция просмотра не вернула правильный ответ»).

У меня как-то нет выбора в этом случае, и я не знаю, как решить проблему. Любая помощь приветствуется!

1 Ответ

0 голосов
/ 06 марта 2020

Я понял, что проблема не в том, что данные не читаются должным образом, а в том, что страница не обновляется. Хотя консоль печатает запрос GET для этой страницы, она не выполняет прямую передачу, поскольку она уже находится на той же странице.

Единственный обходной путь, над которым я сейчас работаю, - это реализация socket.io для динамического обновления содержимого.

...