如何强制Flask在每个GET请求上查询数据库?

时间:2019-07-09 13:05:35

标签: python mysql flask

我有一段非常简单的代码:

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

启动服务器时,一切正常,但是,如果在运行应用程序时对数据库进行更改,则更改不会反映在/ read页面上,必须重新启动应用程序以反映更改。 我希望每次刷新页面时该代码都能查询数据库,并且当前行为对我来说似乎很违反直觉。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

您是否尝试过在配置中将TEMPLATES_AUTO_RELOAD设置为true?当您在调试模式下运行时,它应该切换为ON,但是似乎模板重装一直存在一些问题。

您还应该使用flask run --debug命令。 app.run有run命令可以解决的问题。

答案 1 :(得分:0)

您的光标随应用程序实例一起初始化,因此执行的查询将以只读方式保存到该实例,因此反映到数据库的更改在该实例中是持久的。

有几种解决方法可以解决此问题。

我建议您为数据库实例创建单独的模块,并在需要时导入。

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)