我在思考如何处理 Flask 请求中过期的 sqlalchemy 对象时遇到了麻烦。假设我执行以下操作:
from models import Foo, Bar
@app.route("/page")
def page():
foos = Foo.query.all()
for foo in foos:
b = Bar(foo.data)
db.session.add(b)
db.session.commit()
return render_template('page.html', foos=foos)
Run Code Online (Sandbox Code Playgroud)
然后在page.html:
{% for foo in foos %}
{{ foo. name }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
然后 SQLAlchemy 将对模板循环中的每个 foo 执行选择查询,因为session.commit()将foos集合标记为已过期。如果我知道无法foos实际更改,那么防止len(foos)执行查询的正确方法是什么?同样,如果foos 已更改,使用单个查询而不是多个查询刷新数据的正确方法是什么?