My .fetchall () не обновляется в моем приложении Flask?

#python #mysql #flask

#python #mysql #flask

Вопрос:

Этот coe должен отображать все записи, находящиеся в данный момент в базе данных, но это не так. При перезагрузке страницы на ней не отображаются последние строки, добавленные в базу данных.

 mod = Blueprint('home', __name__)
conn = engine.connect()

def grabData():
    query = text(
        "SELECT * FROM "
            "users "
        "ORDER BY id DESC "
    )
    rows = conn.execute(query).fetchall()
    return rows

@mod.route('/')
def home():
    return render_template('index.html', result=grabData())
  

MySQL Workbench показывает, что новые строки есть. После перезапуска приложения flask отображаются новые строки.

Я также пытался поместить запрос внутрь home() , но это тоже не сработало. Есть идеи, что я делаю не так?

Комментарии:

1. Что заставляет вас думать, что это не работает? Если данные в базе данных не изменяются, «новый набор данных» также всегда будет одним и тем же.

2. У меня есть код, который добавляет запись в базу данных, и когда я обновляю страницу, он не выдает мне последний набор строк.

3. Но, возможно, тот код, который добавляет запись в базу данных, не работает? Вы COMMIT вносите свои изменения?

4. Я смотрю на базу данных, я вижу строку в базе данных….

5. Какая база данных? Как вы на это смотрите? Что произойдет, если вы перезапустите базу данных? Что произойдет, если вы перезапустите приложение flask?

Ответ №1:

Прежде всего я хочу поблагодарить всех за комментарии, я нашел ответ, и я надеялся, что пользователь @davidism опубликовал бы его, но я думаю, что я это сделаю, но это полная заслуга его.

Итак, его комментарий был, я цитирую, «Не открывайте соединение глобально, открывайте его для каждого запроса». Итак, что я сделал? Я только открывал соединение с БД для каждого запроса, и это фактически решило мою проблему.

Вместо кода в исходном сообщении, это то, что я в конечном итоге сделал, чтобы заставить его работать.

 mod = Blueprint('home', __name__)

def grabData():
    conn = engine.connect()
    query = text(
        "SELECT * FROM "
            "users "
        "ORDER BY id DESC "
    )
    rows = conn.execute(query).fetchall()
    conn.close()
    return rows

@mod.route('/')
def home():
    return render_template('index.html', result=grabData())