def do_select(klass, conn, id = None, _orderby = None, _limit = None, **kw): """Heavy lifting for select methods""" sql = "select * from %s" %(klass.TABLE) args = [] if id != None or kw != {}: sql += " where " if kw: if id != None: kw['id'] = id where_sql, args = utils.encode_where(kw) sql += where_sql elif id != None: sql += " id = %s" args = [id] if _orderby: if type(_orderby) == str: _orderby = [_orderby] for orderterm in _orderby: if orderterm.lstrip('-') not in (klass.FIELDS + klass.SYSTEM_FIELDS): raise InvalidFieldError("Invalid sort order", orderterm) sql += ' ORDER BY ' + ','.join([ ("%s DESC" % (x[1:]) if x[0] == '-' else x) for x in _orderby]) if _limit: if isinstance(_limit, tuple): sql += " LIMIT %d" %(int(_limit[0])) sql += " OFFSET %d" %(int(_limit[1])) else: sql += " LIMIT %d" %(int(_limit)) c = conn.cursor(cursor_factory = DictCursor) c.execute(sql, args) return c
def count(klass, conn, **kw): sql = "select count(*) from " + klass.TABLE if kw: where, values = utils.encode_where(kw) sql += " WHERE " + where else: values = kw with closing(conn.cursor()) as c: c.execute(sql, values) row = c.fetchone() return row[0]