将SQL查询结果转换为Python列表

17

我是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个回答

35

如果你在Python中有一个可迭代对象,要将其转换为列表,只需调用list()内置函数

list(cursor.fetchall())

请注意,可迭代对象通常与列表一样有用,而且由于它可以是惰性的,因此可能更有效。

你原来的代码失败了,因为它不太合理。你遍历行并枚举它们,所以你得到了(0, first_row), (1, second_row)等等,这意味着你正在建立每个n行的第n个项目的列表,这根本不是你想要的。

这段代码显示了一些问题——首先,没有任何参数的list()通常最好用空列表文字[]替换,因为它更容易阅读。

接下来,你尝试通过索引进行循环遍历,在Python中这是一个坏主意。直接循环遍历值本身,而不是使用索引来获取值。

另外请注意,当你确实需要像这样构建值列表时,列表推导式是最好的方法,而不是创建一个列表,然后向其中添加元素。


2
很好的解释。然而,该表达式生成的是一系列行。问题是关于一系列列。请参见下面的答案以获取列表的列表。 - Rainald62

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

1
谢谢!我一直在寻找这个。 - mona
它帮了我,谢谢。 - Bheeshma
我遇到了 KeyError: 0。 - Alex G

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]

6
尽管这段代码可能回答了问题,但提供关于为什么和/或如何回答问题的额外上下文信息,可以提高其长期价值。 - adiga

0
如果您正在使用存储过程,可以像这样将结果转换为列表。

cursor = connection.cursor()
parameters = []
cursor.callproc('spProcedureName', parameters)
resultList =[r.fetchall() for r in cursor.stored_results()][0]
cursor.close()


0
一个人只需要像下面演示的那样调用list(cursor)。
import pymysql

# Create the database connection.
# The connection parameters are host, port, user, password, and database.
# These parameters in this code are held in the app.config().
dump_conn = pymysql.connect(
    host=app.config[ 'DUMP_SQLALCHEMY_HOST' ],
    port=int( app.config[ 'DUMP_SQLALCHEMY_PORT' ] ),
    user=vault[ 'data' ][ 'username' ],
    passwd=vault[ 'data' ][ 'password' ],
    db=app.config[ 'DUMP_SQLALCHEMY_DB' ]
)

# Grab the query from a sql_queries helper file.
sql_query = query_transactions_for_csv()

# From the connection get a cursor.
dump_cursor = dump_conn.cursor()

# Handle the cursor.close() with a 'with' statement.
with dump_cursor as cursor:

    # Execute the query.
    cursor.execute( sql_query )

    # Use list( cursor ) to get a Python list.
    rows = list( cursor )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接