我有一个金字塔网页设置。其中一个观点确实是这样的: -SQLAlchemy查询 - 它们何时执行?
sql_list = do_a_query()
handle_a_post_request(request)
return dict(sql_list=sql_list)
def do_a_query():
request.db.query(WhatIAmLookingFor)
的(灰鲭鲨,但我认为这是不相关的),那么模板处理基于在sql_list数据显示我的网页。
在handle_a_post_request
函数中,我根据发布请求修改会话(并运行commit())。这些修改显示在结果页面中,这表明查询本身实际上“运行”或在我的模板中调用时执行。由于我使用的是mako,所以调用是使用: -
% for row in sql_list:
<tr>
<td> ${row[0]} </td>
<td> ${row[1]} </td>
<td> ${row[2]} </td>
</tr>
我的结论是否正确?当确实是sqlalchemy查询“已实现”时,会在该点之后的会话更改不再显示在查询的“结果”中?或者我的理解在某个地方存在根本上的缺陷?
我担心的是,将来对函数的改变(例如,在显示之前迭代其某些预处理的结果)将会改变我的网页的行为。当然,“正确的”答案只是提前移动handle_a_post_request()
,但我想先彻底理解发生的事情。
我想你可能会遇到''autoflush'',看看这个:http://stackoverflow.com/questions/4201455/sqlalchemy-whats-the-difference-between-flush-and-commit –
没有,肯定没有那个集合。 –