Pregunta

Encontré un ejemplo usando cx_oracle, este ejemplo muestra toda la información de Cursor.description.

import cx_Oracle
from pprint import pprint

connection = cx_Oracle.Connection("%s/%s@%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), así que cambié el código:

import cx_Oracle
import pprint

connection = cx_Oracle.Connection("%s/%s@%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 formas de imprimir los nombres de las columnas. Por favor, consígueme alternativas al principiante de Python. :-)

¿Fue útil?

Solución

los Código fuente de Sqlalchemy es un buen punto de partida para métodos robustos de introspección de la base de datos. Así es como Sqlalchemy refleja los nombres de las 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

Otros consejos

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

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

Dado que Cursor.Description devuelve una lista de tuplas de 7 elementos, puede obtener el elemento 0, que es un nombre de columna.

Aquí el código.

import csv
import sys
import cx_Oracle

db = cx_Oracle.connect('user/pass@host:1521/service_name')
SQL = "select * from dual"
print(SQL)
cursor = db.cursor()
f = open("C:\dual.csv", "w")
writer = csv.writer(f, lineterminator="\n", quoting=csv.QUOTE_NONNUMERIC)
r = cursor.execute(SQL)

#this takes the column names
col_names = [row[0] for row in cursor.description]
writer.writerow(col_names)

for row in cursor:
   writer.writerow(row)
f.close()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top