• XSS.stack #1 – первый литературный журнал от юзеров форума

[python] пишем свой SQLRip by%username%

Guron_18

floppy-диск
Пользователь
Регистрация
13.12.2018
Сообщения
1 420
Решения
2
Реакции
2 325
Не, ну а чо? берем питухон прям з банки...
Что делает скрипт? Сохраняет выбранные таблицы отдельно в файл.
ответ на тему /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()
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх