Не, ну а чо? берем питухон прям з банки...
Что делает скрипт? Сохраняет выбранные таблицы отдельно в файл.
ответ на тему /threads/66908/
писал процедурно как мудак особо не заморачиваясь, если оптимизируете код и рефакторните, то флаг вам в руки - выложите ниже)
Что делает скрипт? Сохраняет выбранные таблицы отдельно в файл.
ответ на тему /threads/66908/
писал процедурно как мудак особо не заморачиваясь, если оптимизируете код и рефакторните, то флаг вам в руки - выложите ниже)
Python:
import re
if __name__ == '__main__':
# список таблиц для сохранения
table_for_saves = [
'user',
'teachers',
]
file_in = 'test.sql'
file_out = 'test_result.sql'
# Ищем названия таблиц и записываем в массив table_names
with open(file_in, 'r', encoding='utf-8') as lines:
table_names = []
for line in lines:
line = line.strip()
if 'CREATE TABLE' in line:
table_name = re.findall('`(.+)`', line)
table_names.append(table_name[0])
print('Таблицы в базе:')
print('\n'.join(table_names))
#print(table_for_saves)
# создаем файл результатов
sf = open(file_out, 'a+', encoding='utf-8')
# еще раз перечисляем файл, что бы уже сохранить нужные таблицы
with open(file_in, 'r', encoding='utf-8') as lines:
save_this = 0
for line in lines:
line = line.strip()
table_name = re.findall('`(.+)`', line)
# проверяем если есть нужная нам таблица, то ставим ммаркер на старт записи
if 'CREATE TABLE' in line \
and len(table_name) !=0 \
and table_name[0] in table_for_saves: save_this = 1
# аналогично, если следующая таблица НЕ содержит выбранных таблиц в table_for_saves то оканчиваем запись и идем дальше
if 'CREATE TABLE' in line \
and len(table_name) !=0 \
and not table_name[0] in table_for_saves: save_this = 0
# если маркер стоит на зпись, то пишем в файл.
# flush - нужен, то бы сразу сохранять полученные результаты, а не ждать пока скрипт отработает полностью
if save_this == 1:
sf.write(line+'\n')
sf.flush()
# ну собственно закрываем запись
sf.close()