Comment parcourir cur.fetchall() en Python
Je suis en train de connectivité de base de données en Python 3.4.
Il y a deux colonnes dans ma base de données.
Ci-dessous est la requête qui me donne toutes les données provenant de deux colonnes illustré format
REQUÊTE:
cur.execute(""" select * from filehash """)
data=cur.fetchall()
print(data)
De SORTIE:
[('F:\\test1.py', '12345abc'), ('F:\\test2.py', 'avcr123')]
Pour itérer à travers cette sortie, mon code est comme ci-dessous
cur.execute(""" select * from filehash """)
data=cur.fetchall()
i=0
j=1
for i,row in data:
print(row[i])
print(row[j])
i=i+1
Cela me donne l'erreur ci-dessous
print(row[i])
TypeError: string indices must be integers
Permettez-moi de savoir comment pouvons-nous travailler sur les valeurs individuelles de fetchall()
Redbeard011010 repzero zvone je peux idivudally d'accès comme row[0], row[1], mais quand je fait une boucle à l'aide pour i,j des données: print(data[i]) print(data[j]), je suis d'erreur ci-dessous print(data[i]) TypeError: liste des indices doivent être des entiers, pas de str même pour les énumérer(données) ainsi
Redbeard011010 repzero zvone je peux idivudally d'accès comme row[0], row[1], mais quand je fait une boucle à l'aide pour i,j des données: print(data[i]) print(data[j]), je suis d'erreur ci-dessous print(data[i]) TypeError: liste des indices doivent être des entiers, pas de str même pour les énumérer(données) ainsi
Redbeard011010 repzero zvone je peux idivudally d'accès comme row[0], row[1], mais quand je fait une boucle à l'aide pour i,j des données: print(data[i]) print(data[j]), je suis d'erreur ci-dessous print(data[i]) TypeError: liste des indices doivent être des entiers, pas de str même pour les énumérer(données) ainsi
OriginalL'auteur npormambi | 2015-12-25
Vous devez vous connecter pour publier un commentaire.
Il semble que vous avez deux colunms dans le tableau, de sorte que chaque ligne contient deux éléments.
Il est plus facile de parcourir cette façon:
Qui est le même que:
Vous pouvez aussi, comme vous l'avez essayé:
Mais qui a échoué parce que vous écrasait
i
avec la valeur de la première colonne, dans cette ligne:for i, row in data:
.MODIFIER
BTW, en général, vous n'aurez plus jamais besoin ce modèle en Python:
Au lieu de cela, il est courant de le faire simplement:
Bonjour Redbeard011010 repzero zvone...
Redbeard011010 repzero zvone je peux idivudally d'accès comme row[0], row[1], mais quand je fait une boucle à l'aide pour i,j des données: print(data[i]) print(data[j]), je suis d'erreur ci-dessous print(data[i]) TypeError: liste des indices doivent être des entiers, pas de str même pour les énumérer(données) ainsi
Vous êtes en train de faire pire que dans la question 😉 npormambi bien expliqué dans sa réponse, mais une fois de plus, à partir d'un angle différent:
data[7]
est ligne 8;data[7][1]
est la 2e colonne en ligne 8;for x in data
prend, ligne par ligne, à partir de données et la met dans x, de sorte que vous pouvez accéder àx[0]
etx[1]
pour obtenir des colonnes;for x, y in data
lit ligne par ligne de données, le dévoile et met colonnes dansx
ety
. Il est cruicial que vous comprenez que les parties à la perfection. Maintenant, erreur: aprèsfor i, j in data
, les données de la colonne est écrit ài
etj
, ils ne sont plus 0 et 1, doncdata[i]
est tout simplement faux.Pour obtenir une meilleure compréhension de cela, essayez d'imprimer tout:
print (data)
,print (row)
,print (i)
,print (j)
dans différents endroits, en particulier dans la ligne avant de l'erreur.OriginalL'auteur zvone
Pour parcourir et d'imprimer des lignes de
cursor.fetchall()
vous aurez envie de le faire:Vous devez également être en mesure d'accéder à des indices de la rangée, comme
row[0]
,row[1]
, iirc.Bien sûr, au lieu de l'impression de la ligne, vous pouvez manipuler la ligne de données de l'cependant vous avez besoin. Imaginez le curseur comme un ensemble de lignes/dossiers (c'est à peu près tout c'est).
OriginalL'auteur Redbeard011010
regardant
vous prenez des chaînes i et j et de l'indexation comme
qui vous a donné typeError
c'est parce que j'ai des données est une chaîne de caractères et votre une indexation de ce
essayer cette
avez-vous supprimer vos variables "j=1" et "i=0" et "i=i+1" à partir de vos codes et ne vos variables de données contient "[('F:\\test1.py', '12345abc'), ('F:\\test2.py', 'avcr123')]"? ....print(data) pour vérifier que c'est la vraie valeur
OriginalL'auteur repzero
Que la sortie vous a donné
[('F:\\test1.py', '12345abc'), ('F:\\test2.py', 'avcr123')]
De sorte que vous n'avez pas besoin de ligne[i] ou de la ligne[j], que c'était faux, que chaque étape de l'itération
est le même que
i, row = ('abc', 'def')
misabc
variablei
et " def " pourrow
BTW ,je ne sais pas ce que la base de données que vous utilisez, si vous utilisez
Mysql
et pilote pythonMySQL Connector
, vous pouvez télécharger ce guide à fetch résultat de mysql comme dictionnairevous pouvez obtenir un dict dans l'itération, et les touches de votre champs de la table' nom. Je pense que cette méthode est plus pratique.
OriginalL'auteur Kevin Yan
À parcourir ce:
[('F:\test1.py', '12345abc'), ('F:\test2.py', 'avcr123')]
De sortie:
OriginalL'auteur SANTOSH SINGH