У меня есть настройка веб-страницы пирамиды. Один из видов делает что-то вроде этого: -Запросы 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)
The (мако, но я думаю, что это не имеет значения) шаблон затем обрабатывает отображение моего веб-страницы на основе данных в 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'', посмотрите на это: http://stackoverflow.com/questions/4201455/sqlalchemy-whats-the-difference-between-flush-and-commit –
Нет, определенно нет такого набора. –