code: def iter(self, query, *parameters, **kwargs):
          
          cursor = self._cursor()
          try:
              self._execute(cursor, query, parameters or None, kwargs)
              if cursor.description:
                  column_names = [column.name for column in cursor.description]
                  while True:
                      record = cursor.fetchone()
                      if not record:
                          break
                      yield Row(zip(column_names, record))
              raise StopIteration
  
          except:
              cursor.close()
              raise
docs: Returns a generator for records from the query.