我有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'}
答案 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
表示的每一行,其中键对应于列名,并且值来自于桌子。
您无需进行转换。