我有一個金字塔網頁設置。其中一個觀點確實是這樣的: -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 –
沒有,肯定沒有那個集合。 –