如何在Python中迭代cur.fetchall()

时间:2015-12-25 15:04:23

标签: python python-3.x

我正在使用Python 3.4中的数据库连接。 我的数据库中有两列。

以下是查询,它以所示格式显示来自两列的所有数据 QUERY:

cur.execute(""" select * from filehash """)
data=cur.fetchall()
print(data)

输出:

[('F:\\test1.py', '12345abc'), ('F:\\test2.py', 'avcr123')]

要遍历此输出,我的代码如下

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

这给我以下错误

print(row[i])
TypeError: string indices must be integers

让我知道我们如何处理fetchall()

的个别价值观

5 个答案:

答案 0 :(得分:4)

看起来表中有两个colunms,因此每行包含两个元素。

以这种方式迭代它们是最容易的:

for column1, column2 in data:

这与:

相同
for row in data:
    column1, column2 = row

你也可以尝试:

for row in data:
    print row[0] # or row[i]
    print row[1] # or row[j]

但是,由于您使用第一列的值覆盖了i,因此失败了:for i, row in data:

修改

顺便说一句,顺便说一句,你永远不会在Python中需要这种模式:

i = 0
for ...:
    ...
    i += 1

而不是那样,通常只做:

for item in container:
    # use item

# or, if you really need i:
for i, item in enumerate(container):
    # use i and item

答案 1 :(得分:2)

要迭代并打印来自cursor.fetchall()的行,您只是想做:

for row in data:
    print row

您还应该能够访问该行的索引,例如row[0]row[1],iirc。

当然,您可以根据需要操作该行的数据,而不是打印该行。想象一下将光标作为一组行/记录(几乎就是它)。

答案 2 :(得分:1)

看着

[('F:\\test1.py', '12345abc'), ('F:\\test2.py', 'avcr123')]
  i              j                 i            j

你正在使用字符串i和j并将其索引为

   print(row['F:\\test1.py'])
    print(row['12345abc'])

给了你typeError

TypeError: string indices must be integers

这是因为我在数据中是一个字符串而你的索引是

试试这个

for i,j in data:
    print(i)
    print(j)

答案 3 :(得分:0)

作为您提供的输出[('F:\\test1.py', '12345abc'), ('F:\\test2.py', 'avcr123')]

for i, row in data:
    print(i)  # i is column1's value
    print(row)# row is column's value

所以你不需要row [i]或row [j],这是错误的,因为那个迭代的每一步

for i, row in data 

与将i, row = ('abc', 'def')设置为变量abc并将“def”设置为i

row相同

BTW,我不知道您使用的数据库,如果您使用Mysql和python驱动程序MySQL Connector,您可以查看本指南fetch mysql result as dictionary 你可以在迭代中得到一个字典,键是你的表字段的名字。我认为这种方法更方便。

答案 4 :(得分:0)

迭代这个: [(' F:\ test1.py',' 12345abc'),(' F:\ test2.py',' avcr123') ]

Code:
for i in data:
   print i[0] + '\t' + i[1]

输出:

  

F:\ test1.py 12345abc
  F:\ test2.py avcr123