#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:
Вы можете легко сгенерировать csv с помощью sqlplus или SQLcl:
https://oracle-base.com/articles/misc/sqlcl-format-query-results-with-the-set-sqlformat-command
https://www.thatjeffsmith.com/archive/2015/02/a-quick-4-1-trick-set-sqlformat/
Комментарии:
1. Спасибо. Но я хотел иметь какой-то метод для прямого экспорта данных в формате CSV из моего рабочего пространства Python.
2. Для будущих читателей, использующих SQL * Plus, также см. Быстрая генерация CSV и JSON из базы данных Oracle .