На самом деле способ поиска экземпляра сеанса sqlalchemy для запросов на самом деле не имеет ничего общего с пилонами и / или пирамидой.Пилоны, возможно, предложили один из способов как «стандартный» путь пилонов, но это все.Единственное реальное различие между способами получения вашего сеанса - это пример использования ZopeTransactionExtension.
ZopeTransactionExtension - это небольшая часть, которая гарантирует, что каждый открываемый сеанс присоединяется к активной транзакции.Таким образом, если вы откроете 5 сеансов, они все присоединятся к одной и той же транзакции.Таким образом, если вы фиксируете или откатываете транзакцию, вся работа, проделанная любой из 5 сессий, последует их примеру.Модуль транзакции ("action.commit () ") является ключевым здесь.
pyramid_tm пытается упростить настройку транзакции ... она запускает одну после ввода запроса, все сеансы базы данных с областью действия присоединяются к ней ...и затем в конце запроса, если он обнаружит ошибку, он выполнит откат транзакции.В противном случае транзакция будет совершена.Таким образом, код уровня представления никогда не должен создавать или закрывать / фиксировать / откатывать транзакцию вручную.
В основном session.flush () предназначен для того, чтобы убедиться, что экземпляры модели базы данных заполняют свои первичные ключи без фиксации транзакции..
Таким образом, в представлении все, что вам нужно сделать, это:
def myview(request):
session = DBsession()
session.add(model)
pyramid_tm обеспечит фиксацию сеанса или его откат.