Guest User

sqlite2csv

a guest
Jun 18th, 2025
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.78 KB | None | 0 0
  1. import sqlite3
  2. import csv
  3. import os
  4. import argparse
  5. from pathlib import Path
  6.  
  7. def export_sqlite_to_csv(database_path):
  8.     # Подключаемся к базе данных
  9.     conn = sqlite3.connect(database_path)
  10.     cursor = conn.cursor()
  11.    
  12.     # Создаем имя папки на основе имени файла БД
  13.     db_file = Path(database_path)
  14.     output_dir = f"{db_file.stem}_csv"
  15.     os.makedirs(output_dir, exist_ok=True)
  16.    
  17.     # Получаем список всех таблиц (исключая виртуальные FTS таблицы)
  18.     cursor.execute("""
  19.        SELECT name
  20.        FROM sqlite_master
  21.        WHERE type='table'
  22.          AND name NOT LIKE 'sqlite_%'
  23.          AND name NOT LIKE '%_fts%'
  24.          AND name NOT LIKE '%_config'
  25.          AND name NOT LIKE '%_data'
  26.          AND name NOT LIKE '%_idx'
  27.          AND name NOT LIKE '%_content'
  28.          AND name NOT LIKE '%_docsize'
  29.    """)
  30.     tables = [table[0] for table in cursor.fetchall()]
  31.    
  32.     print(f"Экспорт базы {db_file.name} в папку: {output_dir}")
  33.    
  34.     # Экспортируем каждую таблицу
  35.     for table_name in tables:
  36.         output_path = os.path.join(output_dir, f"{table_name}.csv")
  37.        
  38.         try:
  39.             # Получаем данные таблицы
  40.             cursor.execute(f"SELECT * FROM [{table_name}];")
  41.             rows = cursor.fetchall()
  42.            
  43.             # Получаем названия столбцов
  44.             cursor.execute(f"PRAGMA table_info([{table_name}]);")
  45.             columns = [column[1] for column in cursor.fetchall()]
  46.            
  47.             # Записываем в CSV
  48.             with open(output_path, 'w', newline='', encoding='utf-8') as f:
  49.                 writer = csv.writer(f)
  50.                 writer.writerow(columns)  # Заголовки
  51.                 writer.writerows(rows)    # Данные
  52.                
  53.             print(f"  ├─ Таблица {table_name} → {output_path}")
  54.            
  55.         except sqlite3.OperationalError as e:
  56.             print(f"  ╰─ Ошибка таблицы {table_name}: {str(e)}")
  57.    
  58.     # Закрываем соединение
  59.     conn.close()
  60.     return output_dir
  61.  
  62. if __name__ == "__main__":
  63.     parser = argparse.ArgumentParser(description='Экспорт SQLite базы в CSV файлы')
  64.     parser.add_argument('database', help='Путь к файлу базы данных SQLite')
  65.     args = parser.parse_args()
  66.    
  67.     output_folder = export_sqlite_to_csv(args.database)
  68.    
  69.     print("\n" + "═" * 50)
  70.     print(f"Экспорт завершен успешно!")
  71.     print(f"Все таблицы сохранены в папке: {output_folder}")
  72.     print("═" * 50)
Tags: Scrypts
Advertisement
Add Comment
Please, Sign In to add comment