code: def select_rows(cols, rows, mode='list', cast=True):
      
      mode = mode.lower()
      if mode == 'list':
          modecast = lambda cols, data: data
      elif mode == 'dict':
          modecast = lambda cols, data: dict(zip(cols, data))
      elif mode == 'row':
          modecast = lambda cols, data: encode_row(data)
      else:
          raise ItsdbError('Invalid mode for select operation: {}\n'
                           '  Valid options include: list, dict, row'
                           .format(mode))
      for row in rows:
          try:
              data = [row.get(c, cast=cast) for c in cols]
          except TypeError:
              data = [row.get(c) for c in cols]
          yield modecast(cols, data)
docs: Yield data selected from rows.
  
      It is sometimes useful to select a subset of data from a profile.
      This function selects the data in *cols* from *rows* and yields it
      in a form specified by *mode*. Possible values of *mode* are:
  
      ==================  =================  ==========================
      mode                description        example `['i-id', 'i-wf']`
      ==================  =================  ==========================
      `'list'` (default)  a list of values   `[10, 1]`
      `'dict'`            col to value map   `{'i-id': 10,'i-wf': 1}`
      `'row'`             [incr tsdb()] row  `'10@1'`
      ==================  =================  ==========================
  
      Args:
          cols: an iterable of column names to select data for
          rows: the rows to select column data from
          mode: the form yielded data should take
          cast: if `True`, cast column values to their datatype
              (requires *rows* to be :class:`Record` objects)
  
      Yields:
          Selected data in the form specified by *mode*.