将SQL结果转换为Python列表

17 投票
5 回答
132975 浏览
提问于 2025-04-17 15:37

我刚开始学Python。我想把SQL查询的结果转换成一个列表。以下是我的代码:

cursor = connnect_db()

query = "SELECT * FROM `tbl`"

cursor.execute(query)

options = list()

for i,row in enumerate(cursor.fetchall()):
   options.append(row[i])

我的表里有6列,但这段代码没有生成6个元素的列表。我哪里出错了呢?

5 个回答

12

在编程中,有时候我们需要让程序在某个条件满足时才执行特定的操作。这就像是给程序设置一个“开关”,只有当这个“开关”打开时,程序才会继续运行。

比如说,你可能想要在用户输入正确的密码后,才能让他们访问某个页面。这个时候,你就可以用条件语句来检查用户输入的密码是否正确。如果正确,就执行接下来的操作;如果不正确,就不执行。

这种方式可以帮助我们控制程序的流程,确保只有在满足特定条件时,程序才会继续进行。这样做不仅能提高程序的安全性,还能让程序的运行更加高效。

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]
17

当我使用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]

另外,最后两行可以合并成:

final_result = [i[0] for i in cursor.fetchall()]
36

如果你在Python中有一个可迭代的对象,想要把它变成一个列表,可以直接使用内置的 list() 函数

list(cursor.fetchall())

要注意的是,可迭代对象通常和列表一样有用,而且在某些情况下更高效,因为它可以“懒加载”。

你原来的代码有问题,因为它逻辑上不太合理。你是对每一行进行循环并给它们编号,所以你得到的是 (0, first_row), (1, second_row) 这样的结果……这意味着你在构建每一行的第n个项目的列表,这根本不是你想要的。

这段代码还有其他问题——首先,list() 如果没有任何参数,通常可以用一个空列表 [] 来替代,这样更容易阅读。

接下来,你试图通过索引来循环,这在Python中并不是个好主意。应该直接循环遍历值,而不是先用索引获取值。

另外,当你确实需要像这样构建一个值的列表时,使用 列表推导式 是最好的方法,而不是先创建一个列表再往里面添加元素。

撰写回答