如何将SQL查询结果转换为python字典

时间:2015-02-27 00:34:24

标签: python sql dictionary

我有difficuty将我的查询结果转换为python字典。每个字典应该代表一个学生,键是列名,值是查询中的相应值,到目前为止,这是我提出的:

def all_students():
    qu= 'select * from students'
    crs.execute(qu)
    for row in crs:
        student= {"StudentNum":row[0], "StudentLastName":row[2], "StudentFirst Name":row[3}
    return student

但是当我打印它时,它返回正确的信息,一切都不正常,它只显示一条记录:

{'StudentLastName': Jane, StudentNum: 'Smith  ', StudentFirst Name: '1612'}

6 个答案:

答案 0 :(得分:9)

您可以使用cursor.description获取列名称和" zip"每个返回行的列名列表产生一个字典列表:

import itertools

desc = cursor.description
column_names = [col[0] for col in desc]
data = [dict(itertools.izip(column_names, row))  
        for row in cursor.fetchall()]

答案 1 :(得分:3)

我希望这会有所帮助...

'optimizer_val': [tf.keras.optimizers.Adam(0.1)],

答案 2 :(得分:2)

此时你可能已经解决了你的问题,但无论如何:

如果您使用的是mysql,我认为这就是您所需要的:

https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursordict.html

根据定义: MySQLCursorDict游标将每一行作为字典返回。每个字典对象的键是MySQL结果的列名。

所以你必须只设置 crs = cnx.cursor(dictionary = True)

希望有所帮助

答案 3 :(得分:0)

也许这可以帮助: http://codetrace.blogspot.com/2010/05/convert-query-result-to-dictionary-like.html

query_result = [ dict(line) for line in [zip([ column[0] for column in crs.description], row) for row in crs.fetchall()] ]

print query_result

答案 4 :(得分:0)

要回答原始问题,您可以尝试以下操作(无需遍历crs,只要表格内容适合您的内存,就可以直接使用crs.fetchall() ):

result_list_of_dict = [{'StudentNum': col1, 'StudentLastName': col2, 'StudentFirst Name': col3} for (col1, col2, col3) in crs.fetchall()]

结果result_list_of_dict是一个字典列表,每个元素(字典)将具有您指定的3个键(“ StudentNum”,“ StudentLastName”和“ StudentFirst Name”),并具有从SQL提取的关联值桌子。

要扩展:

基本上,cursor.fetchall()返回一个元组列表,因此只要您列出了应该返回的所有值,就可以根据需要修改前部分。例如,以下代码适用于5列的表格,您只希望提取前3列:

result_dict = {col1:(col2, col3) for (col1, col2, col3, col4, col5) in cursor.fetchall()}

在这种情况下,结果result_dict将会是字典。

答案 5 :(得分:0)

如果您来自哈佛大学的cs50课程,则SELECT查询将返回一个列表,其中列出了用Python dict表示的每一行,其中键对应于列名,并且值来自于桌子。

您无需进行转换。