2011-10-15 3 views
1

J'utilise psycopg2 pour me connecter à la base de données Postgres et retourner les résultats de la requête sur l'écran en utilisant Python. Je peux seulement retourner une colonne de données, pas beaucoup de colonnes comme PSQL. S'il vous plaît voir mon code. Où ai-je tort?psycopg2: erreur lors de l'affichage de nombreuses colonnes de données en Python se connectant à PostgreSQL

Votre réponse aimable serait grandement appréciée.

#!/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] 

Répondre

0

Ce que vous essayez d'obtenir n'est pas très clair pour moi.

Si vous n'avez besoin que d'une colonne de données, vous pouvez filtrer cela dans la requête SQL. Par exemple:

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

encore psycopg2 retourne un tableau de tuples, où chaque tuple contient les colonnes que vous avez demandé pour. Si vous ne voulez pas les tuples et juste un tableau de valeurs pour la colonne de vos données, vous pouvez les convertir à l'aide:

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

Si c'est pas ce que vous demandez, s'il vous plaît reformuler votre question.

+0

Merci pour votre commentaire! J'ai reformulé ma question originale. Je veux voir plusieurs colonnes de données que j'ai sélectionnées. – dave

1

J'ai trouvé la réponse sur initd.org/psycopg/docs/cursor.html. Voici le code correct. S'il vous plaît voir les deux dernières lignes de code avec les changements. Par souci de clarté, la première version du code renvoie uniquement une colonne de données. La 2ème version listée ci-dessous retournera, en fait elle affichera/imprime, toutes les colonnes que j'ai sélectionnées.

#!/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 
Questions connexes