如何逐个打印PostgreSQL数据库多张表?cursor.fetchall()为何失效
问题原因
你连续执行三次cursor.execute()后只调用一次fetchall(),这会导致前两次查询的结果集被第三次执行覆盖,最终只能获取到Table_C的数据,自然没法逐个打印三张表的内容。
解决方法
方法一:每次查询后立即获取并打印结果
把fetchall()和打印操作放在每个execute()之后,就能依次拿到每张表的数据:
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() # 存储各表数据 cursor.execute("SELECT * FROM Table_A") table_a_data = cursor.fetchall() cursor.execute("SELECT * FROM Table_B") table_b_data = cursor.fetchall() cursor.execute("SELECT * FROM Table_C") table_c_data = cursor.fetchall() # 逐个打印 print("--- Table_A 数据 ---") print(table_a_data) print("\n--- Table_B 数据 ---") print(table_b_data) print("\n--- Table_C 数据 ---") print(table_c_data) # 关闭资源 cursor.close() conn.close()
注意:实际使用中记得操作完成后关闭游标和数据库连接,避免资源泄漏。
内容的提问来源于stack exchange,提问作者Prem
相关产品推荐
相关产品推荐

