Advertisement
Mochinov

Untitled

Aug 4th, 2022
1,054
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.21 KB | None | 0 0
  1. import csv
  2. import sqlite3
  3.  
  4.  
  5. class LoadingData:
  6.     """
  7.    Класс для загрузки данных из csv в базу данных
  8.  
  9.    Class for load data from csv into data base
  10.    """
  11.  
  12.     def __init__(self, dbase_name: str, table_name: str, name_file: str, *args, **kwargs) -> None:
  13.         self.dbase_name = dbase_name
  14.         self.table_name = table_name
  15.         self.name_file = name_file
  16.  
  17.         # Открываем файл на чтение / Open file for reading
  18.         self._file = open(self.name_file)
  19.         self.content = csv.reader(self._file)
  20.  
  21.         # Получаем название столбцов /
  22.         self._column = self.transform_column()
  23.  
  24.         # Подключаемся к базе данных / Connecting to the database
  25.         self.connection = sqlite3.connect(self.dbase_name)
  26.  
  27.         # Выполнить загрузку из файла / Load from file
  28.         self.execute_script()
  29.  
  30.  
  31.     def execute_script(self) -> None:
  32.         """
  33.        Выполняем загрузку данных
  34.  
  35.        Performing data loading
  36.        """
  37.         # Подключаемся к базе / Connecting to the base
  38.         cursor = self.connection.cursor()
  39.  
  40.         # Выполняем создание таблицы исходя из структуры файла / Create table based on file structure
  41.         cursor.execute(self.create_structure())
  42.        
  43.         # Выполняем запись данных / Performing data recording
  44.         cursor.executemany(self.insert_structure(), self.content)
  45.        
  46.         # Сохраняем все изменения / Save all changes
  47.         self.connection.commit()
  48.  
  49.  
  50.  
  51.     def insert_structure(self) -> str:
  52.         """
  53.        Метод генерирует вставку данных изходя из столбцов файла
  54.  
  55.        The method generates an insertion of data based on the columns of the file
  56.        """
  57.  
  58.  
  59.         return f'''
  60.            INSERT INTO {self.table_name} ({', '.join([_ for _ in self._column])}) VALUES({', '.join(['?' for _ in range(len(self._column))])})
  61.        '''
  62.  
  63.     def create_structure(self) -> str:
  64.         """
  65.        The method generates the table creation structure
  66.  
  67.        Метод генерирует структуру созданиея таблицы
  68.        """
  69.         sql_fields = ",\n".join([f"{sql_structure} TEXT" for sql_structure in self._column[1:]])
  70.  
  71.         create_table = f'''
  72.            CREATE TABLE {self.table_name}(
  73.                id INTEGER PRIMARY KEY AUTOINCREMENT,
  74.                {sql_fields}
  75.            );
  76.        '''
  77.  
  78.         return create_table
  79.  
  80.     def transform_column(self) -> list:
  81.         """
  82.        Преобразует название столбцов
  83.  
  84.        Converts column names
  85.        """
  86.  
  87.         structure = list(self.content)[0]
  88.         return [_.lower().replace(' ', '_') for _ in structure]
  89.  
  90.  
  91.     def __del__(self) -> None:
  92.         """Закрытие потока / Closing a stream"""
  93.  
  94.         self._file.close()
  95.         self.connection.close()
  96.  
  97.  
  98. db = LoadingData(
  99.     "departament.sqlite",
  100.     "departament",
  101.     "police-department-calls-for-service.csv",
  102. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement