将sql结果转换为list python

时间:2013-02-12 15:24:11

标签: python mysql sql

我是初学者用python。我想将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])

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

5 个答案:

答案 0 :(得分:21)

如果你在Python中有一个iterable,要创建一个列表,可以简单地调用the list() built-in

list(cursor.fetchall())

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

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

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

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

另请注意,当需要构建这样的值列表时,list comprehension是最好的方法,而不是创建列表,然后附加到它

答案 1 :(得分:6)

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

答案 2 :(得分:4)

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]

答案 3 :(得分:0)

如下所示,只需要调用列表(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 )

答案 4 :(得分:0)

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


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