使用cursor.fetchall()时无法从第二行获取数据

时间:2015-06-26 18:12:30

标签: python mysql

 cursor.execute("""SELECT content, COUNT(*)
                   FROM Attachments
                   WHERE id = 123""")
results = cursor.fetchall()
print str(results[0][1]) # prints 3, meaning there are three rows returned
print results[1].content # IndexError: tuple index out of range

查询返回三行,但我只能访问第一行。

2 个答案:

答案 0 :(得分:3)

COUNT(*)导致MySQL将所有行聚合为一个。 content字段将是来自任何聚合行的单个值。

要获取所有行,请使用

cursor.execute("""SELECT content
                   FROM Attachments
                   WHERE id = 123""")
results = cursor.fetchall()

然后,您可以查看len(results)以获取计数:

print(len(results)) # prints 3, meaning there are three rows returned

并使用以下方式获取第二行:

print(results[1])

答案 1 :(得分:1)

我认为你误解了cursor.fetchall()是如何运作的。它返回所有行的列表,其长度可以使用

进行检查
results = cursor.fetchall()
print len(results)

应该通过索引错误的外观返回1。

如果你访问results[0][1],你正在访问第一行索引1的任何内容,这似乎是3。