Получился код представления:
@view_config(route_name="loader", request_method="POST", renderer="json") def _loader(self): # ........ for i, el in enumerate(els): try: # ....... ask = page.xpath(el.ask_xpath) bid = page.xpath(el.bid_xpath) r = DBSession.query(Rate).filter(Rate.date==datetime.date.today()).first() if r: DBSession.delete(r) r = Rate(ask = ask, bid = bid) DBSession.add(rate) except Exception, e: pass finally: self.request.session.flash(i, queue='loader'); return dict(parse_progress=self.request.session.pop_flash('loader'))
Выполнение кода приводит к ошибке
InvalidRequestError: This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback().
Если ставим DBSession.rollback() в блок исключений, то получаем
ResourceClosedError: The transaction is closed
Похожий вопрос задавался здесь, но предложенные решения не рабочие