2010-06-07 38 views
6

Encontré un ejemplo usando cx_Oracle, este ejemplo muestra toda la información de Cursor.description.Formas mejores de imprimir los nombres de las columnas al usar 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() 

Lo que quería ver era la lista de Cursor.description[0] (nombre), por lo que cambió el código:

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() 

Creo que habrá mejores maneras de imprimir los nombres de columnas. Por favor, consígueme alternativas para el principiante de Python. :-)

+0

Lo siento amigo, lo has cagado tú mismo;) Gracias – ant

Respuesta

2

El SQLAlchemy source code es un buen punto de partida para métodos robustos de introspección de bases de datos. Aquí es cómo SQLAlchemy refleja los nombres de tabla de 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

Puede utilizar la lista de comprensión como una alternativa para obtener los nombres de columna:

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

Desde cursor.description devuelve una lista de 7- tuplas de elementos puede obtener el 0º elemento que es un nombre de columna.

Cuestiones relacionadas