79 votes

Python db-api: fetchone vs fetchmany vs fetchall

Aujourd'hui, je viens de discuter avec des collègues au sujet du db-api fetchone vs fetchmany vs fetchall de python.

Je suis sûr que le cas d'utilisation de chacun d'eux dépend de la mise en œuvre de la base de données db-api que j'utilise, mais en général, quels sont les cas d'utilisation de fetchone vs fetchmany vs fetchall?

En d'autres termes, l'équivalent suivant? ou y en a-t-il un qui soit préféré aux autres? et si oui dans quelles situations?

 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
 

20voto

David Cournapeau Points 21956

Je pense que ça dépend de la mise en œuvre, mais vous pouvez vous faire une idée des différences par la recherche dans les MySQLdb sources. Selon les options, mysqldb fetch* maintenir le nombre actuel de lignes en mémoire ou sur le côté serveur, donc fetchmany vs fetchone a une certaine flexibilité ici pour savoir quoi garder à l' (python) de la mémoire et ce qu'il faut garder db côté serveur.

PEP 249 ne donne pas beaucoup de détails, donc je suppose que c'est pour optimiser les choses en fonction de la base de données pendant la sémantique exacte de mise en œuvre sont définies.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X