2010-06-07 17 views
6

Trovato un esempio utilizzando cx_Oracle, questo esempio mostra tutte le informazioni di Cursor.description.Modi migliori per stampare i nomi delle colonne quando si utilizza 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() 

Quello che volevo vedere era la lista dei Cursor.description[0] (nome), così ho cambiato il codice:

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

Penso che ci saranno modi migliori per stampare i nomi delle colonne. Per favore, procurami alternative al principiante Python. :-)

+0

Spiacente amico, l'hai inchiodato da solo;) Grazie – ant

risposta

2

Il SQLAlchemy source code è un buon punto di partenza per solidi metodi di introspezione del database. Ecco come SQLAlchemy riflette i nomi di tabella da 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

È possibile utilizzare di lista come alternativa per ottenere i nomi delle colonne:

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

Dal cursor.description restituisce una lista di 7- tuple di elementi è possibile ottenere lo 0 ° elemento che è un nome di colonna.

Problemi correlati