psycopg2: ошибка при отображении многих столбцов данных в Python, соединяющихся с PostgreSQL - PullRequest
1 голос
/ 15 октября 2011

Я использую 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 ]

1 голос
/ 16 октября 2011

Я нашел ответ на 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
0 голосов
/ 15 октября 2011

Мне не совсем понятно, чего вы пытаетесь достичь.

Если вам нужен только один столбец данных, вы можете отфильтровать его в запросе SQL. Например:

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

Тем не менее psycopg2 вернет массив кортежей, где каждый кортеж содержит столбцы, которые вы запрашивали. Если вам не нужны кортежи и просто массив значений для ваших данных столбца, вы можете преобразовать их, используя:

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

Если это не то, о чем вы просите, перефразируйте ваш вопрос.

...