如何用Python将多表查询元组结果转换为带列名的字典
PostgreSQL查询结果转字典(多表场景)
问题排查
你的代码存在几个核心问题:
- 循环中每次查询都会覆盖
results变量,最终只保留最后一张表的查询结果 - 没有获取查询结果的列名,无法生成带列名的字典
dict(zip(results))用法错误:fetchall()返回的是行元组的列表,直接zip会把每行元组拆成键值对,但这不符合你需要的“列名-值”映射逻辑- 循环内的
c变量未被使用,完全没起到作用
修正后的代码
import psycopg2 # 建立数据库连接 conn = psycopg2.connect( database="CONNETpy", user='postgres', password='pass', host='localhost', port='5432' ) cursor = conn.cursor() tables = ["Class_A", "Class_B", "Class_C"] # 最终存储所有表数据的大字典 final_dict = {} for table in tables: cursor.execute(f"SELECT * FROM {table}") # 获取查询结果的列名 column_names = [desc[0] for desc in cursor.description] # 获取所有行数据 rows = cursor.fetchall() # 将每行元组转成列名-值的字典,组成列表 table_data = [dict(zip(column_names, row)) for row in rows] # 将当前表的数据存入大字典,表名为键 final_dict[table] = table_data # 关闭连接 cursor.close() conn.close() print(final_dict)
关键说明
cursor.description:返回查询结果的元数据,每个元素包含列名、类型等信息,通过desc[0]提取列名[dict(zip(column_names, row)) for row in rows]:遍历每一行数据,用zip把列名和对应行值配对,再转成字典,最终得到该表的字典列表- 最终的
final_dict结构:键是表名,值是对应表的所有行字典,完全满足“包含对应列名的单个字典输出”需求
内容的提问来源于stack exchange,提问作者Prem
相关产品推荐
相关产品推荐

