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