You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 13:24:58