title: Python Peewee execute_sql() example
body: <p>I am using the Peewee module as the ORM for my project. </p>
  
  <p>I read the entire documentation, there is no clear
  example on how to process the result from db.execute_sql(). </p>
  
  <p>I traced the code, only can find db.execute_sql() return back the cursor. </p>
  
  <p>Does anyone knows how to process the cursor, such as iterate over it and get
  back the result from complex select statement. </p>
  
  <p>Update: I just found the following source code from peewee folder, it should help
  me to resolve this problem. </p>
  
  <pre>
  class QueryResultWrapper(object):
      """
      Provides an iterator over the results of a raw Query, additionally doing
      two things:
      - converts rows from the database into python representations
      - ensures that multiple iterations do not result in multiple queries
      """
      def __init__(self, model, cursor, meta=None):
          self.model = model
          self.cursor = cursor
  
          self.__ct = 0
          self.__idx = 0
  
          self._result_cache = []
          self._populated = False
          self._initialized = False
  
          if meta is not None:
              self.column_meta, self.join_meta = meta
          else:
              self.column_meta = self.join_meta = None
  
      def __iter__(self):
          self.__idx = 0
  
          if not self._populated:
              return self
          else:
              return iter(self._result_cache)
  
      def process_row(self, row):
          return row
  
      def iterate(self):
          row = self.cursor.fetchone()
          if not row:
              self._populated = True
              raise StopIteration
          elif not self._initialized:
              self.initialize(self.cursor.description)
              self._initialized = True
          return self.process_row(row)
  
      def iterator(self):
          while True:
              yield self.iterate()
  
      def next(self):
          if self.__idx  self.__ct):
              try:
                  self.next()
              except StopIteration:
                  break
  </pre>