2010-06-07 32 views
6

Trouvé un exemple en utilisant cx_Oracle, cet exemple montre toutes les informations de Cursor.description.Meilleurs moyens d'imprimer les noms de colonne lors de l'utilisation cx_Oracle

import cx_Oracle 
from pprint import pprint 

connection = cx_Oracle.Connection("%s/%[email protected]%s" % (dbuser, dbpasswd, oracle_sid)) 
cursor = cx_Oracle.Cursor(connection) 
sql = "SELECT * FROM your_table" 
cursor.execute(sql) 
data = cursor.fetchall() 
print "(name, type_code, display_size, internal_size, precision, scale, null_ok)" 
pprint(cursor.description) 
pprint(data) 
cursor.close() 
connection.close() 

Ce que je voulais voir était la liste des Cursor.description[0] (nom), alors j'ai changé le code:

import cx_Oracle 
import pprint 

connection = cx_Oracle.Connection("%s/%[email protected]%s" % (dbuser, dbpasswd, oracle_sid)) 
cursor = cx_Oracle.Cursor(connection) 
sql = "SELECT * FROM your_table" 
cursor.execute(sql) 
data = cursor.fetchall() 
col_names = [] 
for i in range(0, len(cursor.description)): 
    col_names.append(cursor.description[i][0]) 
pp = pprint.PrettyPrinter(width=1024) 
pp.pprint(col_names) 
pp.pprint(data) 
cursor.close() 
connection.close() 

Je pense qu'il y aura de meilleures façons d'imprimer les noms des colonnes. S'il vous plaît, procurez-vous des alternatives au débutant Python. :-)

+0

Désolé mec, vous l'avez cloué vous-même;) Thanx – ant

Répondre

2

Le SQLAlchemy source code est un bon point de départ pour des méthodes robustes d'introspection de base de données. Voici comment SQLAlchemy reflète les noms de tables d'Oracle:

SELECT table_name FROM all_tables 
WHERE nvl(tablespace_name, 'no tablespace') NOT IN ('SYSTEM', 'SYSAUX') 
AND OWNER = :owner 
AND IOT_NAME IS NULL 
1

Vous pouvez utiliser la compréhension de la liste comme une alternative pour obtenir les noms de colonnes:

col_names = [row[0] for row in cursor.description]

Depuis cursor.description retourne une liste de 7 Tuples d'élément, vous pouvez obtenir le 0e élément qui est un nom de colonne.