【发布时间】:2017-04-04 14:29:41
【问题描述】:
我有一个金字塔网页设置。其中一个视图执行以下操作:-
sql_list = do_a_query()
handle_a_post_request(request)
return dict(sql_list=sql_list)
def do_a_query():
request.db.query(WhatIAmLookingFor)
(mako,但我认为这无关紧要)模板然后根据 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 查询究竟何时“实现”,以便在那之后对会话的更改不再显示在查询的“结果”中?还是我的理解存在根本性的缺陷?
我担心的是,将来对 do_a_query() 函数的更改(例如,在显示之前对其结果进行迭代以进行一些预处理)将改变我网页的行为。当然,“正确”的答案只是提前移动handle_a_post_request(),但我想先彻底了解正在发生的事情。
【问题讨论】:
-
我想你可能会遇到
autoflush,看看这个:stackoverflow.com/questions/4201455/… -
不,绝对没有那套。
标签: python sqlalchemy pyramid