psycopg2: 在Python中连接PostgreSQL时显示多列数据出错

1 投票
2 回答
806 浏览
提问于 2025-04-17 04:23

我正在使用psycopg2这个库来连接Postgres数据库,并用Python把查询结果显示在屏幕上。可是我只能返回一列数据,而不能像PSQL那样返回多列。请看看我的代码。我哪里做错了呢?

非常感谢你的帮助。

#!/usr/bin/python


import psycopg2

CONNSTR = """
  host=localhost 
  dbname=wa
  user=super
  password=test
  port=5432"""
cxn = psycopg2.connect(CONNSTR)
cur = cxn.cursor()
cur.execute("""SELECT procpid,usename,current_query FROM pg_stat_activity;""")

rows = cur.fetchall()

print "\nShow me the query results:\n"
for row in rows:
        print "   ", row[1]

2 个回答

0

我不太明白你想要达到什么目的。

如果你只需要一列数据,那么你可以在SQL查询中把其他的过滤掉。例如:

cur.execute("""SELECT procpid FROM pg_stat_activity;""")

不过,使用psycopg2时,它会返回一个包含元组的数组,每个元组里都有你请求的列。如果你不想要这些元组,只想要这一列的数据,可以用以下方法转换:

colum_data = [r[1] for r in rows]

如果这不是你想问的,请重新表述一下你的问题。

1

我在initd.org/psycopg/docs/cursor.html上找到了答案。这里是正确的代码。请注意最后两行代码的变化。

为了更清楚,第一版的代码只返回一列数据。而下面的第二版代码会返回,也就是会显示/打印出我选择的所有列。

#!/usr/bin/python

import psycopg2

CONNSTR = """
  host=localhost 
  dbname=wa
  user=super
  password=test
  port=5432"""
cxn = psycopg2.connect(CONNSTR)
cur = cxn.cursor()
cur.execute("""SELECT procpid,usename,current_query FROM pg_stat_activity;""")

for rows in cur: 
print rows

撰写回答