Python db-api: fetchone vs fetchmany vs fetchall

Tuve una discusión hoy con algunos compañeros de trabajo sobre db-api fetchone de python vs fetchmany vs fetchall.

Estoy seguro de que el caso de uso de cada uno de estos depende de la implementación de la db-api que estoy usando, pero en general, ¿cuáles son los casos de uso de fetchone vs fetchmany vs fetchall?

En otras palabras, ¿son los siguientes equivalentes? o hay uno de estos que se prefiere sobre los demás? y si es así, ¿en qué situaciones?

cursor.execute("SELECT id, name FROM `table`")
for i in xrange(cursor.rowcount):
    id, name = cursor.fetchone()
    print id, name


cursor.execute("SELECT id, name FROM `table`")
result = cursor.fetchmany()
while result:
    for id, name in result:
        print id, name
    result = cursor.fetchmany()


cursor.execute("SELECT id, name FROM `table`")
for id, name in cursor.fetchall():
    print id, name