Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sqlite3
- import csv
- import os
- import argparse
- from pathlib import Path
- def export_sqlite_to_csv(database_path):
- # Подключаемся к базе данных
- conn = sqlite3.connect(database_path)
- cursor = conn.cursor()
- # Создаем имя папки на основе имени файла БД
- db_file = Path(database_path)
- output_dir = f"{db_file.stem}_csv"
- os.makedirs(output_dir, exist_ok=True)
- # Получаем список всех таблиц (исключая виртуальные FTS таблицы)
- cursor.execute("""
- SELECT name
- FROM sqlite_master
- WHERE type='table'
- AND name NOT LIKE 'sqlite_%'
- AND name NOT LIKE '%_fts%'
- AND name NOT LIKE '%_config'
- AND name NOT LIKE '%_data'
- AND name NOT LIKE '%_idx'
- AND name NOT LIKE '%_content'
- AND name NOT LIKE '%_docsize'
- """)
- tables = [table[0] for table in cursor.fetchall()]
- print(f"Экспорт базы {db_file.name} в папку: {output_dir}")
- # Экспортируем каждую таблицу
- for table_name in tables:
- output_path = os.path.join(output_dir, f"{table_name}.csv")
- try:
- # Получаем данные таблицы
- cursor.execute(f"SELECT * FROM [{table_name}];")
- rows = cursor.fetchall()
- # Получаем названия столбцов
- cursor.execute(f"PRAGMA table_info([{table_name}]);")
- columns = [column[1] for column in cursor.fetchall()]
- # Записываем в CSV
- with open(output_path, 'w', newline='', encoding='utf-8') as f:
- writer = csv.writer(f)
- writer.writerow(columns) # Заголовки
- writer.writerows(rows) # Данные
- print(f" ├─ Таблица {table_name} → {output_path}")
- except sqlite3.OperationalError as e:
- print(f" ╰─ Ошибка таблицы {table_name}: {str(e)}")
- # Закрываем соединение
- conn.close()
- return output_dir
- if __name__ == "__main__":
- parser = argparse.ArgumentParser(description='Экспорт SQLite базы в CSV файлы')
- parser.add_argument('database', help='Путь к файлу базы данных SQLite')
- args = parser.parse_args()
- output_folder = export_sqlite_to_csv(args.database)
- print("\n" + "═" * 50)
- print(f"Экспорт завершен успешно!")
- print(f"Все таблицы сохранены в папке: {output_folder}")
- print("═" * 50)
Advertisement
Add Comment
Please, Sign In to add comment