我有一段非常简单的代码:
@app.route('/read')
def db_read():
dbcursor.execute('SELECT * FROM books;')
result = dbcursor.fetchall()
return render_template('read.html', result=result)
启动服务器时,一切正常,但是,如果在运行应用程序时对数据库进行更改,则更改不会反映在/ read页面上,必须重新启动应用程序以反映更改。 我希望每次刷新页面时该代码都能查询数据库,并且当前行为对我来说似乎很违反直觉。有人可以帮忙吗?
答案 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)