我的表格列为id
,col1
,col2
,col3
。我以这种方式执行了查询。
cur.execute(query)
row = cur.fetchall()
我是否可以在row
内获取dict
的数据,即我希望将此结果作为结果传递给 api 。
cur.fetchall()
会产生以下格式((id,col1,col2,col3),(id,col1,col2,col3),(id,col1,col2,col3))
我可以在
中获得结果吗?[
{id:value,col1:value,col2:value,col3:value},
{id:value,col1:value,col2:value,col3:value},
{id:value,col1:value,col2:value,col3:value}
]
我知道这个概念,我可以循环fetchall()
,并使用字典概念获取值,即
rows = cursor.fetchall()
for row in rows:
id = row['id']
col1 = row['col1']
and so on...
我可以将rows
作为字典传递吗?
答案 0 :(得分:2)
您需要使用cursor.description
columns = [col[0] for col in cursor.description]
rows = [dict(zip(columns, row)) for row in cursor.fetchall()]
答案 1 :(得分:2)
最简单的方法是使用DictCursor
:
import MySQLdb
...
cursor = db.cursor(MySQLdb.cursors.DictCursor)
您还可以通过将db
参数传递给cursor_class
connect
生成的所有游标设置此项。
不同类型的游标的文档在这里:https://mysqlclient.readthedocs.io/user_guide.html#using-and-extending
答案 2 :(得分:1)
我修改了一点 alecxe 的答案,以压缩游标循环内的每一行。如果您有一个大表,因此您不会在内存中保存所有行,这可能会有所帮助。
cursor = db.execute_sql("select * from something")
columns = [col[0] for col in cursor.description]
for row in cursor.fetchall():
row = dict(zip(columns, row))
print(row)
答案 3 :(得分:0)
简单的方法是在光标功能内将字典设置为 True :
db = connector.connect(**config)
cursor = db.cursor(dictionary=True)