NTA

Выгрузка данных из несвязанных таблиц в отдельные файлы с помощью python

В предыдущей статье мы рассмотрели, как с помощью Python можно создать и запустить SQL запрос с множеством условий для выгрузки информации из баз данных (БД) Oracle в один файл частями.

В данной статье мы расскажем, как использовать рассмотренный скрипт (частично изменив его) для выгрузки записей из различных несвязанных таблиц в отдельные файлы.

Не секрет, что прежде чем писать SQL запросы к таблицам БД для формирования выгрузок, необходимо проанализировать, какая информация в них содержится. Особенно это актуально в случае, если описание к БД отсутствует (что в нашей работе встречается нередко). Для этого, например, можно выгрузить небольшое количество записей из нужных таблиц в отдельные файлы excel. При этом зачастую таблиц, которые необходимо изучить, довольно много. Чтобы не выгружать информацию из каждой вручную, можно воспользоваться Python. Ниже мы рассмотрим, как это сделать на примере БД Oracle.

Для начала создадим txt файл с названием «dt_in.txt», в котором укажем таблицы для выгрузки данных в следующем виде:

Название_базы_данных_1.Название_таблицы_1;

Название_базы_данных_1.Название_таблицы_2;

Название_базы_данных_2.Название_таблицы_1;

Название_базы_данных_3.Название_таблицы_1

Обратите внимание, в файле не должно быть пробелов и пустых строк, в том числе после названия последней таблицы в списке. Указать можно таблицы разных БД.

Далее запускаем скрипт на Python (импорт библиотек, подключение к Oracle, описание функций для взаимодействия с Oracle и выполнения запроса можно найти в указанной выше статье).

#Имя файла со строками вида base_name.table_name; fn = 'dt_in.txt' #Чтение входного файла с именами баз данных и таблиц f = open(fn,'r',encoding='UTF-8') #Ключ для записи заголовков, если h=0, то происходит первый проход по циклу - записываем в файл заголовки, #если h=1 - не первый проход по циклу, заголовки записаны h=0 l = 0 #Счетчик строк для запуска основного SQL-запроса for row in f: dt = row.split(";") #Имя файла в который выгружаем new_file = str(dt[0].replace('\n','')) l += 1 #SQL-запрос (количество выгружаемых строк можно менять) sql = """SELECT * FROM """ + str(dt[0].replace('\n','')) + """ where rownum<400""" #Проверка на наличие записей в таблице. Если записей в таблице нет, файл с ее именем не создается, #дальнейшая ее выгрузка не производится count= """SELECT count(*) FROM """ + str(dt[0].replace('\n','')) + """ where rownum<3""" with getOdsConn(odsLogin,odsConnectStr) as con1: _header,result,us = dfFromOracle(con1, count) if result.values[0,0]==0: print("Таблица " + new_file + " пустая") continue #Выполнение основного SQL-запроса with getOdsConn(odsLogin,odsConnectStr) as con1: _header,result,us = dfFromOracle(con1, sql) #Запись заголовков в выходной файл if h==0: header = ';'.join(_header)+'\n' myfile=open(new_file + '.csv', 'w',encoding='UTF-8') myfile.writelines(header) myfile.close() h=1 #Запись выгруженных строк таблиц в файлы result.to_csv(new_file + '.csv', sep=';',encoding='UTF-8',mode='a',header=None) print('Выгружено ' + str(len(result)) + ' из ' + str(new_file) ) f.close()

В результате, данные из таблиц автоматически выгружаются в отдельные файлы excel, названия которых содержат наименование БД и таблицы. Если таблица пустая – файл не формируется. В Python выводится сообщение о том, сколько записей выгружено из каждой таблицы, или, что она пустая.

Таким образом, с помощью Python можно:

— уменьшить трудозатраты на выгрузку информации для анализа из несвязанных таблиц БД в отдельные файлы;

— выгружать данные для анализа сразу из нескольких БД.

{ "author_name": "NTA", "author_type": "editor", "tags": ["\u0447\u0442\u0435\u043d\u0438\u0435","\u0441\u0447\u0435\u0442\u0447\u0438\u043a","\u043a\u043b\u044e\u0447","\u0438\u043c\u044f","\u0435\u0441\u043b\u0438","sql"], "comments": 0, "likes": 2, "favorites": 2, "is_advertisement": false, "subsite_label": "newtechaudit", "id": 274129, "is_wide": true, "is_ugc": false, "date": "Tue, 27 Jul 2021 11:47:16 +0300", "is_special": false }
0
0 комментариев
Популярные
По порядку
Читать все 0 комментариев
Магистры российского ИТ-вуза помогли решить задачи Schneider Electric, Group IB, Тинькофф Бизнес
Utair разрешила пассажирам перевозить своих кошек и собак на соседнем кресле Статьи редакции

Придётся купить два билета — на себя и животное.

Кассетный плеер Spotify, фотоаппарат Instagram — как выглядели бы современные приложения до появления интернета Статьи редакции

Ностальгия по 80-м и 90-м.

Tom le French
Задания от самого титулованного программиста в мире и 3,72 млн призовых: каким был VK Cup в этом году

Зачем в VK Cup ежегодно участвуют тысячи специалистов из разных стран и чем запомнится турнир в этом году? Отвечаем на главные вопросы.

Белорусский сервис PandaDoc для управления электронными документами стал «единорогом» — оценка превысила $1 млрд Статьи редакции

За год оценка компании выросла почти в четыре раза.

Бизнес скульптора почти с нуля: как в него прийти, сколько денег приносит, откуда клиенты и куда расти Статьи редакции

Пётр Зайцев проектировал офисы крупных компаний и работал над дизайном станций метро, а теперь трудится в домашней мастерской над скульптурами и зарабатывает 250-300 тысяч рублей в месяц.

Пётр Зайцев
ПЭК уничтожила груз, часть вторая

Вторая серия приключений, предыстория — ниже. Пожалуй, даже третья, одну серию пропустим — в ней меня просто послали в филиале ПЭК, когда я хотела составить акт, мне на ломаном русском объяснили, что только после забора груза.

Пять брендов, которые выпускают одежду, аксессуары и декор из мусора

Вещи, вышедшие из употребления, могут снова стать полезными — после переработки. Мы составили подборку брендов — от маленьких локальных до более крупных и известных за рубежом — которые производят товары из того, что другие просто выбрасывают.

Еду к деду
Как использовать облачные технологии для роста бизнеса в 2022 году: расскажем на Yandex Scale

А ещё представим новые продукты.

#20вопросов Сергею Костюку, советнику заместителя председателя правления Московского кредитного банка

В середине сентября МКБ и GenerationS, платформа по развитию корпоративных инноваций, запустили корпоративный акселератор "МКБ Реактор". Для МКБ это первый полноценный проект, включающий сразу несколько важных этапов, по итогам которого будут определены проекты для дальнейшего долгосрочного сотрудничества.
Финтех сегодня востребован как никогда –…

ЕС представит законопроект об едином разъёме для зарядного устройства смартфонов и планшетов — Reuters Статьи редакции

Принятие проекта сильнее всего повлияет на компанию Apple, которая оснащает устройства собственным разъёмом.

null