如何逐个打印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
相关产品推荐
相关产品推荐

