X DevAPI User Guide for MySQL Shell in Python Mode
      Operations that fetch data items return a cursor that can be used
      to consume those data items from the result set. Data items can be
      read from the database using Collection.find(),
      Table.select() and
      Session.sql().
      Collection.find() returns a data set with
      documents and Table.select() respectively
      Session.sql() return a data set with rows.
    
      All result sets implement a unified way of iterating their data
      items. The unified syntax supports fetching items one by one using
      fetchOne() or retrieving a list of all items
      using fetchAll(). fetchOne()
      and fetchAll() follow forward-only iteration
      semantics. Connectors implementing the X DevAPI can offer more
      advanced iteration patterns on top to match common native language
      patterns.
    
      The following example shows how to access the documents returned
      by a Collection.find() operation by using
      fetchOne() to loop over all documents.
    
      The first call to fetchOne() returns the first
      document found. All subsequent calls increment the internal data
      item iterator cursor by one position and return the item found
      making the second call to fetchOne() return the
      second document found, if any. When the last data item has been
      read and fetchOne() is called again, a
      NULL value is returned. This ensures that the
      basic while loop shown works with all languages that support such
      an implementation.
    
      When using fetchOne(), it is not possible to
      reset the internal data item cursor to the first data item to
      start reading the data items again. A data item (here a Document)
      that has been fetched once using fetchOne() can
      be discarded by the Connector. The data item's life time is
      decoupled from the data set. From a Connector perspective items
      are consumed by the caller as they are fetched. This example
      assumes that the test schema exists.
    
myColl = db.get_collection('my_collection')
res = myColl.find('name like :name').bind('name','L%').execute()
doc = res.fetch_one()
while doc:
        print(doc)
        doc = res.fetch_one()
    
      The following example shows how to directly access the rows
      returned by a Table.select() operation. The
      basic code pattern for result iteration is the same. The
      difference between the following and the previous example is in
      the data item handling. Here, fetchOne()
      returns Rows. The exact syntax to access the column values of a
      Row is language dependent. Implementations seek to provide a
      language native access pattern. The example assumes that the
      test schema exists and that the employee table
      exists in myTable.
    
myRows = myTable.select(['name', 'age']).where('name like :name').bind('name','L%').execute()
row = myRows.fetch_one()
while row:
        # Accessing the fields by array
        print('Name: %s\n' % row[0])
        # Accessing the fields by dynamic attribute
        print('Age: %s\n' % row.age)
        row = myRows.fetch_one()