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

如何逐个打印PostgreSQL数据库中的多张表?为何cursor.fetchall()无法实现该需求?

解决Python读取PostgreSQL多表时仅能获取最后一张表数据的问题

嘿,这个问题我之前也碰到过!核心原因其实很直白——每次调用cursor.execute()执行新的查询语句时,前一次查询的结果集会被直接覆盖掉,所以你最后调用cursor.fetchall()的时候,只能拿到最后一次execute()对应的Table_C的数据。

下面给你两种实用的解决思路:

方法一:每次查询后立即读取并处理结果

这是最直接的方式,执行完一个表的查询后,马上调用fetchall()获取结果并打印,再执行下一个查询:

import psycopg2
conn = psycopg2.connect(
 database="Sample", user='postgres', password='password', host='localhost', port= '5432'
)
cursor = conn.cursor()

# 处理Table_A
cursor.execute("SELECT * FROM Table_A")
print("--- Table_A 数据 ---")
print(cursor.fetchall())

# 处理Table_B
cursor.execute("SELECT * FROM Table_B")
print("\n--- Table_B 数据 ---")
print(cursor.fetchall())

# 处理Table_C
cursor.execute("SELECT * FROM Table_C")
print("\n--- Table_C 数据 ---")
print(cursor.fetchall())

# 记得关闭资源
cursor.close()
conn.close()

方法二:先存储所有表的结果,再统一打印

如果需要后续对这些数据做进一步处理,可以先把每个表的结果存储到列表或字典中,之后再遍历打印:

import psycopg2
conn = psycopg2.connect(
 database="Sample", user='postgres', password='password', host='localhost', port= '5432'
)
cursor = conn.cursor()

# 用列表存储每个表的名称和对应数据
table_results = []

# 逐个查询并保存结果
cursor.execute("SELECT * FROM Table_A")
table_results.append(("Table_A", cursor.fetchall()))

cursor.execute("SELECT * FROM Table_B")
table_results.append(("Table_B", cursor.fetchall()))

cursor.execute("SELECT * FROM Table_C")
table_results.append(("Table_C", cursor.fetchall()))

# 遍历打印所有数据
for table_name, data in table_results:
    print(f"\n--- {table_name} 数据 ---")
    print(data)

# 关闭连接
cursor.close()
conn.close()

补充说明

为什么原代码不行?因为psycopg2的游标对象设计就是这样:每次执行新的execute()时,会自动丢弃之前未读取的结果集,确保游标只关联最新的查询结果。所以如果你不及时读取前一次的结果,就会永久丢失。

内容的提问来源于stack exchange,提问作者Prem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 09:22:40