Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import csv
- import sqlite3
- class LoadingData:
- """
- Класс для загрузки данных из csv в базу данных
- Class for load data from csv into data base
- """
- def __init__(self, dbase_name: str, table_name: str, name_file: str, *args, **kwargs) -> None:
- self.dbase_name = dbase_name
- self.table_name = table_name
- self.name_file = name_file
- # Открываем файл на чтение / Open file for reading
- self._file = open(self.name_file)
- self.content = csv.reader(self._file)
- # Получаем название столбцов /
- self._column = self.transform_column()
- # Подключаемся к базе данных / Connecting to the database
- self.connection = sqlite3.connect(self.dbase_name)
- # Выполнить загрузку из файла / Load from file
- self.execute_script()
- def execute_script(self) -> None:
- """
- Выполняем загрузку данных
- Performing data loading
- """
- # Подключаемся к базе / Connecting to the base
- cursor = self.connection.cursor()
- # Выполняем создание таблицы исходя из структуры файла / Create table based on file structure
- cursor.execute(self.create_structure())
- # Выполняем запись данных / Performing data recording
- cursor.executemany(self.insert_structure(), self.content)
- # Сохраняем все изменения / Save all changes
- self.connection.commit()
- def insert_structure(self) -> str:
- """
- Метод генерирует вставку данных изходя из столбцов файла
- The method generates an insertion of data based on the columns of the file
- """
- return f'''
- INSERT INTO {self.table_name} ({', '.join([_ for _ in self._column])}) VALUES({', '.join(['?' for _ in range(len(self._column))])})
- '''
- def create_structure(self) -> str:
- """
- The method generates the table creation structure
- Метод генерирует структуру созданиея таблицы
- """
- sql_fields = ",\n".join([f"{sql_structure} TEXT" for sql_structure in self._column[1:]])
- create_table = f'''
- CREATE TABLE {self.table_name}(
- id INTEGER PRIMARY KEY AUTOINCREMENT,
- {sql_fields}
- );
- '''
- return create_table
- def transform_column(self) -> list:
- """
- Преобразует название столбцов
- Converts column names
- """
- structure = list(self.content)[0]
- return [_.lower().replace(' ', '_') for _ in structure]
- def __del__(self) -> None:
- """Закрытие потока / Closing a stream"""
- self._file.close()
- self.connection.close()
- db = LoadingData(
- "departament.sqlite",
- "departament",
- "police-department-calls-for-service.csv",
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement