def select()

in src/ab/plugins/db/dao.py [0:0]


    def select(self, fields='*', conditions=None, order_by=None, start=0, num=None, raw=False):
        if fields == '*':
            fields = [self.table]
        elif isinstance(fields, str):
            # f1,f2,f3
            fields = [self.table.c[field.strip()] for field in fields.split(',')]
        elif isinstance(fields, list) and all([isinstance(field, str) for field in fields]):
            # [f1, f2, f3]
            fields = [self.table.c[field.strip()] for field in fields]
        # else keep fields as-is

        query = select(fields).select_from(self.table)

        if conditions:
            where = self.gen_where(conditions)
            query = query.where(where)

        order_by = order_by or self.default_order_by
        if order_by:
            criterion = []
            order_by_list = order_by.split(',')
            for order_by_item in order_by_list:
                order_by_item = order_by_item.strip()
                if ' ' in order_by_item:
                    order_key, order = order_by_item.split(' ')
                    if order.upper() == 'DESC':
                        order_by_item = desc(order_key)
                    else:
                        order_by_item = asc(order_key)
                criterion.append(order_by_item)
            query = query.order_by(*criterion)

        if num:
            query = query.limit(num)
            if start != 0:
                query = query.offset(start)

        result = self.execute(query)
        if not raw:
            result = [self.loads(r) for r in result]
        # result.close()
        return result