我正在使用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()
答案 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