Python db-api: fetchone vs fetchmany vs fetchall

Hoje eu tive uma discussão com alguns colegas de trabalho sobre o db-api fetchone x fetchmany vs fetchall do python.

Tenho certeza de que o caso de uso de cada um deles depende da implementação da db-api que estou usando, mas, em geral, quais são os casos de uso de fetchone vs fetchmany vs fetchall?

Em outras palavras, são os seguintes equivalentes? ou há um desses que é preferido em relação aos outros? e se sim, em que situações?

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

questionAnswers(3)

yourAnswerToTheQuestion