You need to understand the concept of Python cursors.
They are modelled after SQL database cursors in the PEP 249: Python Database API Specification v2.0 to process the results returned by database queries.
The majority of Python database interfaces adhere to this standard: cx_Oracle (Oracle), Psycopg2 (PostgreSQL/PostGIS), MySQLdb (MySQL), sqlite3 (SQLite), etc..
A cursor allows retrieval of one or more rows of the result, until all the matching rows have been processed and it will fetch the entire result set at once, which may cause problems of processing speed (performance) (Is there anything faster than a cursor in ArcGIS to calculate records?).
The databases cursors generally returns list of tuples or list of list while the cursor methods in ArcGIS return a Python enumeration object.
To improve the cursor solution, several wrappers that provide simplified interfaces to SQL databases exist. Some of these might be referred to as object relational mappers, or ORM (creation of Pythonic objects out of database rows) and others may only help generate SQL, or provide simple mapping support (see Higher Level Database Programming)
For ArcPy, solutions are provided by, for example, Sean Gillies (Get with it) and others.
The others geospatial solutions (PyQGIS, grass, osgeo.ogr, Pyshp, Rpy, Fiona, PySAL,etc.) do not use cursors, which makes things easier...