16

我是 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 个元素列表。我在哪里做错了?

4

5 回答 5

34

如果你在 Python 中有一个可迭代对象,要创建一个列表,可以简单地调用内置list()

list(cursor.fetchall())

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

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

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

接下来,您尝试按索引循环,这在 Python 中是个坏主意。循环值本身,而不是您用来获取值的索引。

另请注意,当您确实需要构建这样的值列表时,列表推导是最好的方法,而不是创建一个列表,然后附加到它。

于 2013-02-12T15:25:47.830 回答
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]
于 2017-11-06T11:27:29.923 回答
10

当我使用 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()]
于 2020-02-05T18:56:13.367 回答
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 )
于 2018-12-10T18:53:45.053 回答
0

如果您使用的是存储过程,您可以将结果转换为这样的列表。


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

于 2020-06-18T09:51:18.890 回答