Как вы заставляете Flask запрашивать базу данных при каждом запросе GET? - PullRequest
0 голосов
/ 09 июля 2019

У меня есть очень простой кусок кода:

@app.route('/read')
def db_read():
    dbcursor.execute('SELECT * FROM books;')
    result = dbcursor.fetchall()
    return render_template('read.html', result=result)

Когда я запускаю сервер, все работает нормально, однако, если я внесу изменения в базу данных во время работы приложения, изменения будутне отображается / читать страницу, приложение должно быть перезапущено, чтобы отразить их.Я ожидаю, что код будет запрашивать базу данных каждый раз, когда я обновляю страницу, и текущее поведение кажется мне очень нелогичным.Может кто-нибудь помочь, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

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

Существует несколько обходных путей для преодоления этой проблемы.

Я бы порекомендовал вам создать отдельный модуль для экземпляра базы данных и импортировать его по мере необходимости.

database.py

mydb = mysql.connector.connect(
    host=cfg['host'],
    user=cfg['user'],
    passwd=cfg['password'],
    database=cfg['database']
)

db = mydb.cursor()

app.py

from database import db

@app.route('/read') 
    def db_read():
        db.execute('SELECT * FROM books;')
         result = db.fetchall()
         return render_template('read.html', result=result)
0 голосов
/ 09 июля 2019

Вы пытались установить для TEMPLATES_AUTO_RELOAD значение true в вашей конфигурации? Он должен включаться при запуске в режиме отладки, но кажется, что перезагрузка шаблона всегда была немного ошибочной.

Вы также должны использовать команду flask run --debug. У app.run есть проблемы, с которыми справляется команда run.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...