Пример #1
0
    def main(self,
             model: db.Base,
             limit: int = 999,
             filter: str = "",
             order_by: str = "",
             offset: int = 0,
             join: str = "") -> tuple:

        s = constants.db_session()

        q = s.query(model)

        if join:
            if not isinstance(join, (list, tuple)):
                join = [join]

            for j in join:
                if isinstance(j, str):
                    q = q.join(db.sa_text(j))
                else:
                    q = q.join(j)

        if filter:
            if isinstance(filter, str):
                q = q.filter(db.sa_text(filter))
            else:
                q = q.filter(filter)

        if order_by:
            q = q.order_by(db.sa_text(order_by))

        self.fetched_items = tuple(self._query(q, limit, offset))

        self.fetched.emit(db.model_name(model), self.fetched_items)
        return self.fetched_items
Пример #2
0
    def main(self,
             model: db.Base,
             limit: int = 999,
             filter: str = "",
             order_by: str = "",
             offset: int = 0) -> tuple:

        s = constants.db_session()

        q = s.query(model)

        if filter:
            q = q.filter(db.sa_text(filter))

        if order_by:
            q = q.order_by(db.sa_text(order_by))

        self.fetched_items = tuple(self._query(q, limit, offset))

        self.fetched.emit(db.model_name(model), self.fetched_items)

        return self.fetched_items
Пример #3
0
    def main(self,
             model: db.Base,
             ids: set,
             limit: int = 999,
             filter: str = "",
             order_by: str = "",
             offset: int = 0) -> tuple:

        log.d("Fetching items from a set with", len(ids), "ids", "offset:",
              offset, "limit:", limit)
        if not ids:
            return tuple()

        s = constants.db_session()

        q = s.query(model)

        if filter:
            q = q.filter(db.sa_text(filter))

        if order_by:
            q = q.order_by(db.sa_text(order_by))

        id_amount = len(ids)
        # TODO: only SQLite has 999 variables limit
        _max_variables = 900
        if id_amount > _max_variables:
            fetched_list = [x for x in q.all() if x.id in ids]
            fetched_list = fetched_list[offset:][:limit]
            self.fetched_items = tuple(fetched_list)
        elif id_amount == 1:
            self.fetched_items = (q.get(ids.pop()), )
        else:
            q = q.filter(model.id.in_(ids))
            self.fetched_items = tuple(self._query(q, limit, offset))

        self.fetched.emit(db.model_name(model), self.fetched_items)
        log.d("Returning", len(self.fetched_items), "fetched items")
        return self.fetched_items
Пример #4
0
 def _get_sql(self, expr):
     if isinstance(expr, str):
         return db.sa_text(expr)
     else:
         return expr