Улучшенные способы вывода имен столбцов при использовании cx_Oracle

Нашел пример с использованием cx_Oracle, в этом примере показана вся информация 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()

Я хотел увидеть список Cursor.description[0](имя), поэтому я изменил код:

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

Я думаю, что будут лучшие способы распечатать имена столбцов. Пожалуйста, дайте мне альтернативы для начинающих Python. :-)


person philipjkim    schedule 07.06.2010    source источник
comment
Извини чувак, ты сам прибил это ;) Спасибо   -  person ant    schedule 13.09.2017


Ответы (3)


исходный код SQLAlchemy является хорошим отправной точкой для надежных методов самоанализа базы данных. Вот как SQLAlchemy отображает имена таблиц из 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
person Stephen Emslie    schedule 25.05.2011

Вы можете использовать понимание списка в качестве альтернативы для получения имен столбцов:

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

Поскольку cursor.description возвращает список кортежей из 7 элементов, вы можете получить 0-й элемент, который является именем столбца.

person Hemant    schedule 18.02.2018

Вот код.

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()
person Oguzhan Gunes    schedule 21.06.2018
comment
Большое спасибо, код создал хороший файл CSV. - person Osama Al-Banna; 06.11.2019