Загрузка данных из Oracle DB и экспорт в файл CSV

#python #database #oracle

#python #База данных #Oracle

Вопрос:

У меня есть подключение к некоторой базе данных Oracle и я пытаюсь экспортировать данные в файл CSV. Ниже приведен мой код на Python —

 import jpype
import jaydebeapi
import csv

# Assuming I already have established a connection -
# Connection variable is Conn

Curs = Conn.cursor()
Curs.execute("select * from Table")
Data = list(Curs.fetchall())

with open("mycsvfile.csv", "wb") as f:
    w = csv.DictWriter(f, Data[0].keys())
    w.writerow(dict((fn,fn) for fn in Data[0].keys()))
    w.writerows(Data)
  

Но когда я запустил приведенный выше код, я получил ошибку как —

 Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
AttributeError: 'tuple' object has no attribute 'keys'
  

Не могли бы вы, пожалуйста, помочь мне найти выход?

Большое спасибо за вашу помощь

Ответ №1:

Я использую этот код для создания файла CSV с использованием Python (в моем случае с заголовками). Я думаю, вам стоит попробовать cx_Oracle , для меня это лучший способ взаимодействия с базами данных Oracle из Python.

 import os
import sys
import cx_Oracle 

db = cx_Oracle.connect('user/pass@host:port/service_name')
SQL = "select column1 , column2 , .... , columnn from table"
print(SQL)
cursor = db.cursor()
f = open("C:myfile.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()
  

Комментарии:

1. С этим кодом я получаю ошибку как — cx_Oracle. Ошибка базы данных: DPI-1047: не удается найти 64-разрядную клиентскую библиотеку Oracle: «dlopen (libclntsh.dylib, 1): изображение не найдено». Смотрите cx-oracle.readthedocs.io/en/latest/user_guide/installation.html за помощью

2. возможно, у вас на ноутбуке не установлена правильная версия instant client

3. Обычно я вижу, что CSV используется для выгрузки большого количества строк, поэтому использование параметров cursor.arraysize и cursor.prefetchrows может повысить производительность, см. Настройка производительности выборки .

Ответ №2:

Комментарии:

1. Спасибо. Но я хотел иметь какой-то метод для прямого экспорта данных в формате CSV из моего рабочего пространства Python.

2. Для будущих читателей, использующих SQL * Plus, также см. Быстрая генерация CSV и JSON из базы данных Oracle .