Obtener información de la columna en cx_Oracle cuando la tabla está vacía?

StackOverflow https://stackoverflow.com/questions/956085

  •  12-09-2019
  •  | 
  •  

Pregunta

Estoy trabajando en un un controlador para el módulo de registro de Python. Que registra esencialmente a una base de datos Oracle.

Estoy utilizando cx_Oracle, y algo que no sé cómo se obtiene 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 hacerlo?

¿Fue útil?

Solución

Creo que el atributo description puede ser Qué estás buscando. Esto devuelve una lista de tuplas que describen las columnas de los datos devueltos. Funciona absolutamente feliz 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 username@local>>
>>> cr.description
[('DUMMY', <type 'cx_Oracle.STRING'>, 1, 1, 0, 0, 1)]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top