2017-09-29 5 views
2

Je suis assez certain que pour le plus ils sont fonctionnellement identiques mais je me demande s'il y a certains cas où ils ne sont pas et ce qui se passe sous le capot qui le rend siQuelle est la différence entre "c.fetchall()" et "c.execute (SELECT ....") pour une variable?

Exemple:

c.execute("""SELECT * FROM players WHERE team = ?;"""), (team_name,)) 
results = c.fetchall() 

player_list = [] 
for player in results: 
    player_list.append(player) 

contre

results = c.execute("""SELECT * FROM players WHERE team = ?;"""), (team_name,)) 

player_list = [] 
for player in results: 
    player_list.append(player) 

Répondre

1

le Python DBAPI qui ne fonctionne pas définir ce que execute renvoie: il pourrait s'agir d'un générateur, il pourrait s'agir d'une liste de résultats, il pourrait s'agir d'un objet personnalisé représentant les résultats, etc. Il promet seulement que la requête de base de données sera faite; comment les résultats sont présentés ou rendus disponibles n'est pas défini. Cependant, la méthode fetch_all est définie pour renvoyer une "séquence de séquences", ce qui signifie que vous avez immédiatement le résultat instancié dans la mémoire. Itérer sur le résultat, en particulier, ne va pas déclencher une connexion de base de données retardée pour exécuter une requête ou extraire plus de résultats.

Une conséquence de ceci est qu'une mise en œuvre pourrait définir vos deux approches équivalentes, mais il est nécessaire à.