コード例 #1
0
    def _update(self, model, get_by, update_to):
        # type: (Type[M], List[BinaryExpression], Dict[InstrumentedAttribute, Any]) -> M
        """

        :param model: class to create or get
        :param get_by: get by these filter expressions
        :param update_to: update row with these
        :return:
        """
        query = self.session.query(model).filter(*get_by)  # type: Query
        try:
            instance = query.one()
        except NoResultFound:
            raise NotExistingException("Not Found " + model.__name__ + " by " +
                                       repr(get_by))
        if instance:
            self.session.begin_nested()
            try:
                query.update(update_to)
                self.session.commit()
            except IntegrityError:
                print("ROLLBACK" * 100)
                traceback.print_exc()
                self.session.rollback()
                raise
            instance = query.first()
            return instance
        else:
            raise NotExistingException
コード例 #2
0
 def _get(self, model, *args):
     # type: (Type[M], *BinaryExpression) -> M
     instance = self.session.query(model).filter(*args).first()
     if instance:
         self.session.expunge_all()
         return instance
     else:
         raise NotExistingException("Not Found " + model.__name__ + " by " +
                                    repr(args))
コード例 #3
0
 def _get_one(self, model, *args):
     # type: (Type[M], *BinaryExpression) -> M
     try:
         instance = self.session.query(model).filter(*args).one()
         # self.session.expunge(instance)
         return instance
     except NoResultFound:
         pass
     raise NotExistingException("Not Found " + model.__name__ + " by " +
                                repr(args))
コード例 #4
0
 def _delete(self, session, model, *args):
     # type: (Session, Type[M], *BinaryExpression) -> None
     session.begin_nested()
     try:
         session.query(model).filter(*args).delete(
             synchronize_session='fetch')
         session.flush()
         session.commit()
     except IntegrityError:
         session.rollback()
         raise NotExistingException("Not Found " + model.__name__ + " by " +
                                    repr(args))
コード例 #5
0
 def _get_all2(self, model, order_by, *args):
     # type: (Type[M], InstrumentedAttribute, *BinaryExpression) -> SizedGenerator[M]
     query = self.session.query(model).filter(*args).order_by(
         order_by)  # type: Query
     count = query.count()
     instances = self.__query_yielder(query, self.yield_size)
     lengen = SizedGenerator(instances, count)
     if count > 0:
         return lengen
     elif count == 0:
         return lengen
     else:
         raise NotExistingException("Not Found " + model.__name__ + " by " +
                                    repr(args))
コード例 #6
0
 def _get_all(self, exposable_session, model, order_by, **kwargs):
     # type: (ExposableGeneratorQuery, Type[M], InstrumentedAttribute, **Any) -> SizedGenerator[M]
     query = exposable_session.session.query(model).filter_by(
         **kwargs).order_by(order_by)  # type: Query
     count = query.count()
     instances = self.__exposable_query_yielder(exposable_session, query,
                                                self.yield_size)
     lengen = SizedGenerator(instances, count)
     if count > 0:
         return lengen
     elif count == 0:
         return lengen
     else:
         raise NotExistingException("Not Found " + model.__name__ + " by " +
                                    repr(kwargs))