将sql结果转换为list python

sai*_*can 9 python mysql sql

我初学者用python.I想将sql结果转换为list.Here是我的代码:

cursor = connnect_db()

query = "SELECT * FROM `tbl`"

cursor.execute(query)

options = list()

for i,row in enumerate(cursor.fetchall()):
   options.append(row[i])
Run Code Online (Sandbox Code Playgroud)

我的表中有6列但是这段代码没有创建6个元素列表.我做错了什么?

Gar*_*tty 23

如果您在Python中有一个迭代,做一个列表,可以简单地调用list()内置:

list(cursor.fetchall())
Run Code Online (Sandbox Code Playgroud)

请注意,iterable通常与列表一样有用,并且可能更加有效,因为它可能是惰性的.

您的原始代码失败,因为它没有多大意义.你循环遍历行并枚举它们,所以你得到(0, first_row), (1, second_row)等等...... - 这意味着你正在构建每个第n行的第n项的列表,这根本不是你想要的.

此代码显示了一些问题 - 首先,list()没有任何参数通常更好地替换为空列表文字([]),因为它更容易阅读.

接下来,你试图按索引循环,这在Python中是一个坏主意.循环遍历值本身,而不是您用于获取值的索引.

另请注意,当您确实需要构建这样的值列表时,列表推导是执行此操作的最佳方式,而不是创建列表,然后附加到列表.

  • 很好的解释。但是,该表达式会生成行列表。问题是关于列的列表。请参阅下面的答案以获取列表列表。 (2认同)

小智 9

当我使用 Sudhakar Ayyar 的答案时,结果是一个列表列表,而不是由 .fetchall() 创建的元组列表。这仍然不是我想要的。对他的代码稍作改动,我就能够得到一个简单的列表,其中包含来自 SQL 查询的所有数据:

cursor = connnect_db()

query = "SELECT * FROM `tbl`"

cursor.execute(query)

result = cursor.fetchall() //result = (1,2,3,) or  result =((1,3),(4,5),)

final_result = [i[0] for i in result]
Run Code Online (Sandbox Code Playgroud)

此外,最后两行可以组合成:

final_result = [i[0] for i in cursor.fetchall()]
Run Code Online (Sandbox Code Playgroud)


小智 5

cursor = connnect_db()

query = "SELECT * FROM `tbl`"

cursor.execute(query)

result = cursor.fetchall() //result = (1,2,3,) or  result =((1,3),(4,5),)

final_result = [list(i) for i in result]
Run Code Online (Sandbox Code Playgroud)

  • 尽管此代码可以回答问题,但提供有关此代码为何和/或如何回答问题的其他上下文,可以提高其长期价值。 (4认同)