code: def select(self, fields, **exprs):
          fields = self._parse_fields_string(fields)
          def _make_string_callable(expr):
              if isinstance(expr, basestring):
                  return lambda r: expr % r
              else:
                  return expr
          exprs = dict((k, _make_string_callable(v)) for k, v in exprs.items())
          raw_tuples = []
          for ob in self.obs:
              attrvalues = tuple(getattr(ob, fieldname, None) for fieldname in fields)
              if exprs:
                  attrvalues += tuple(expr(ob) for expr in exprs.values())
              raw_tuples.append(attrvalues)
          all_names = tuple(fields) + tuple(exprs.keys())
          ret = Table()
          ret._indexes.update(dict((k, v.copy_template()) for k, v in self._indexes.items() if k in all_names))
          return ret().insert_many(DataObject(**dict(zip(all_names, outtuple))) for outtuple in raw_tuples)