2009-06-05 9 views
6

Estoy trabajando en un controlador para el módulo de registro de Python. Eso esencialmente se conecta a una base de datos de Oracle.Obteniendo información de columna en cx_oracle cuando la tabla está vacía?

Estoy usando cx_oracle, y algo que no sé cómo obtener es los valores de columna cuando la tabla está vacía.

cursor.execute('select * from FOO') 
for row in cursor: 
    # this is never executed because cursor has no rows 
    print '%s\n' % row.description 

# This prints none 
row = cursor.fetchone() 
print str(row) 

row = cursor.fetchvars 
# prints useful info 
for each in row: 
    print each 

La salida es:

None 
<cx_Oracle.DATETIME with value [None, None, None, None, None, None, None, None, None, None, None, None, None, None, None 
, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None 
, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None]> 
<cx_Oracle.STRING with value [None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 
None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 
None, None, None, None, None, None, None, None, None, None, None, None, None, None, None]> 

Mira ahora en los datos var puedo ver los tipos de datos y sus tamaños (contar nones?), Pero eso no contiene el nombre de la columna.

¿Cómo puedo hacer esto?

Respuesta

13

Creo que el atributo description puede ser lo que estás buscando. Esto devuelve una lista de tuplas que describen las columnas de los datos devueltos. Funciona muy felizmente si no hay filas devueltas, por ejemplo:

 
>>> import cx_Oracle 
>>> c = cx_Oracle.connect("username", "password") 
>>> cr = c.cursor() 
>>> cr.execute("select * from dual where 1=0") 
<__builtin__.OracleCursor on <cx_Oracle.Connection to user [email protected]>> 
>>> cr.description 
[('DUMMY', <type 'cx_Oracle.STRING'>, 1, 1, 0, 0, 1)] 
Cuestiones relacionadas