psycopg2: 在Python中连接PostgreSQL时显示多列数据出错
我正在使用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