Comments 5
За открытие отдельной сессии на каждый чих нужно бить по рукам, а лучше по голове.
Сессия - это не просто "какая-то штука", которую можно открывать по 5 раз внутри каждой вьюшки.
Во-первых, это Identity Map, который предотвращает повторное создание уже заполненных ранее объектов, ассоциированных с одинаковыми строками в БД.
Во-вторых, это абстракция для транзакции, в пределах которой вы можете делать rollback и commit. Как вы будете нормально работать с транзакциями, если у вас каждый отдельный запрос к БД оборачивается в отдельную транзакцию?
Да видно, что некомпетентный человек написал эту статью.
По рукам, а лучше по голове, следует бить тех, кто выбрасывает наружу ORM-mapped объекты паттерна ActiveRecord, завязанные на сессию, после чего терминирует сессию.
Но начать следует с того, что по рукам, а лучше по голове, следует бить тех, кто использует глобальные и статические объекты. И тех, кто не хранит маппинги класс-таблица у себя во внутренних структурах, а внедряет их прямо в классы. Хотя стоп, подождите - ведь это именно то, что делает SQLAlchemy?!
В общем, SQLAlchemy «не самый удачный» образец ORM, и даже то что она де-факто «один из стандартов» в питонячьей разарботке, не делает ее правильной. А что до ошибок которые сделал автор статьи - снявши голову (связавшись с алхимией), по волосам не плачут
Сначала выбрали язык с динамической типизацией потому что так проще, а потом пытаются на велосипедах и костылях по подводным граблям добавить строгую типизацию, но только в IDE.
Ни кого не возникает неопредолимого желания написать подобное на C++, на любом стандарте?
SQLAlchemy 2.0 + Python Generic, или как создать универсальный репозиторий для работы с БД