我很难将我的查询结果转换为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'}
9条答案
按热度按时间roejwanj1#
此时你可能已经解决了你的问题,但无论如何:
如果你使用mysql,我认为这是你需要的:
https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursordict.html
根据定义:* MySQLCursorDict游标将每一行作为字典返回。每个字典对象的键是MySQL结果的列名。*
所以你必须只设置crs = cnx.cursor(dictionary=True)
希望有帮助
o0lyfsai2#
也许这可以帮助:http://codetrace.blogspot.com/2010/05/convert-query-result-to-dictionary-like.html
7jmck4yq3#
我希望这能帮上忙。。
x8goxv8g4#
要回答最初的问题,您可以尝试以下方法(不需要循环
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
将是一个字典。e4eetjau5#
得票最多的是python2,下面是python3的答案:
bmvo0sr56#
如果你希望查询返回一个单个结果,并且你希望字典中的所有值都按它们的列名,你可以用途:
例如,
querySingle("SELECT * FROM animals WHERE id=%s", [1])
可能返回:如何工作
cursor.description
返回所有列的数组,其中每个条目都是一个数组,其中第一个值是列的名称。使用enumerate
,给出每一列沿着索引。然后,只需创建一个字典,名称来自column[0]
沿着数据来自row[index]
。在for循环中返回确保只处理第一行。oipij1gg7#
result = db_pool.execute(query,return_dict=True)
7cjasjjr8#
如果你来自哈佛大学的cs50课程,
SELECT
查询返回一个列表,其中每行由Pythondict
表示,其中键对应于列名,值来自表。你不需要转换它。
dxxyhpgq9#
你可以使用
cursor.description
来获取列名,并“压缩”列名列表,每个返回的行都会产生一个字典列表:注意:在Python3上使用
zip()
代替itertools.izip()
。