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

npo*_*mbi 6 python python-3.x

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

下面是查询,它以两种显示的格式QUERY为我提供了所有数据:

cur.execute(""" select * from filehash """)
data=cur.fetchall()
print(data)
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

[('F:\\test1.py', '12345abc'), ('F:\\test2.py', 'avcr123')]
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误

print(row[i])
TypeError: string indices must be integers
Run Code Online (Sandbox Code Playgroud)

让我知道我们如何处理个人价值观 fetchall()

zvo*_*one 6

看起来您在表中有两列,因此每行将包含两个元素。

以这种方式遍历它们是最简单的:

for column1, column2 in data:
Run Code Online (Sandbox Code Playgroud)

这与:

for row in data:
    column1, column2 = row
Run Code Online (Sandbox Code Playgroud)

你也可以,因为你试过:

for row in data:
    print row[0] # or row[i]
    print row[1] # or row[j]
Run Code Online (Sandbox Code Playgroud)

但是失败了,因为你改写i与第一列的值,在这一行:for i, row in data:

编辑

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

i = 0
for ...:
    ...
    i += 1
Run Code Online (Sandbox Code Playgroud)

取而代之的是,通常简单地执行以下操作:

for item in container:
    # use item

# or, if you really need i:
for i, item in enumerate(container):
    # use i and item
Run Code Online (Sandbox Code Playgroud)


小智 2

要迭代并打印行,cursor.fetchall()您只需执行以下操作:

for row in data:
    print row
Run Code Online (Sandbox Code Playgroud)

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

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