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 комментариев
ЕС представит законопроект об едином разъёме для зарядного устройства смартфонов и планшетов — Reuters Статьи редакции

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

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

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

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

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

13 лайфхаков, которые помогут оплачивать счета и переводить деньги быстрее

Мы постоянно работаем с пользователями и выясняем, что именно их волнует и на какие моменты нужно обратить внимание при разработке функций приложения. Сегодня расскажем, какие возможности мы недавно запустили в ВТБ Онлайн, и как в этом помогли наши клиенты.

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

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

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

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

Как инфляция уничтожает ваш рекламный бюджет: анализ 400 млн кликов и 118 тысяч кампаний за 4 года

Почему трафик из «Яндекс.Поиска» дорожает, как газ в Европе, а «дешевая» РСЯ превратилась в безумного пожирателя бюджетов? Какой рекламный канал самый недооцененный, где покупать трафик и что будет со стоимостью лидов через год?

Как облегчить планирование в редакции: опыт «Лайфхакера»

Мы совершили все ошибки за вас и делимся советами, которые могут пригодиться любой контентной команде.

Utair разрешила пассажирам перевозить своих кошек и собак на соседнем кресле Статьи редакции

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

null