Импорт CSV и XLSX(XLS) файлов в SQLite

Импорт CSV и XLSX(XLS) файлов в SQLite

Для многих приложений часто требуется загрузить данные из CSV или Excel-файла в базу данных. В этой статье рассмотрим, как это сделать для базы данных SQLite с помощью Python.

Импорт из CSV файла

Для работы с CSV файлами в Python можно использовать встроенный модуль csv.

import csv
import sqlite3

def import_csv_to_sqlite(csv_filename, db_name, table_name):
    # Создаем соединение и курсор для работы с SQLite
    conn = sqlite3.connect(db_name)
    cursor = conn.cursor()

    # Открываем CSV файл
    with open(csv_filename, 'r') as file:
        reader = csv.reader(file)

        # Получаем заголовки из первой строки
        headers = next(reader)
        cursor.execute(f"CREATE TABLE {table_name} ({', '.join(headers)});")

        # Вставляем данные
        for row in reader:
            cursor.execute(f"INSERT INTO {table_name} VALUES ({', '.join(['?' for _ in row])});", row)
    
    conn.commit()
    conn.close()

# Пример использования
import_csv_to_sqlite('data.csv', 'database.db', 'data_table')

Импорт из XLSX(XLS) файла

Для работы с Excel файлами рекомендуется использовать библиотеку openpyxl для xlsx или xlrd для xls.

import sqlite3
from openpyxl import load_workbook

def import_xlsx_to_sqlite(xlsx_filename, db_name, table_name):
    # Создаем соединение и курсор для работы с SQLite
    conn = sqlite3.connect(db_name)
    cursor = conn.cursor()

    # Загружаем xlsx файл
    workbook = load_workbook(xlsx_filename)
    sheet = workbook.active

    # Получаем заголовки
    headers = [cell.value for cell in sheet[1]]
    cursor.execute(f"CREATE TABLE {table_name} ({', '.join(headers)});")

    # Вставляем данные
    for row in sheet.iter_rows(min_row=2, values_only=True):
        cursor.execute(f"INSERT INTO {table_name} VALUES ({', '.join(['?' for _ in row])});", row)

    conn.commit()
    conn.close()

# Пример использования
import_xlsx_to_sqlite('data.xlsx', 'database.db', 'data_table')

Примечание: Учтите, что данный код предполагает, что первая строка каждого файла (CSV или XLSX) содержит заголовки колонок. Если это не так, вам потребуется немного адаптировать код под вашу ситуацию.

Советы

Несколько дополнительных заметок и предостережений:

  • Учет форматирования данных: При импорте данных из XLSX или CSV важно обратить внимание на формат данных. Например, числа могут быть представлены в виде текста в исходном файле, и вам, возможно, потребуется преобразовать их в числовой формат перед загрузкой в базу данных.
  • Обработка ошибок: В приведенных примерах обработка ошибок минимальна. На практике рекомендуется добавить обработку исключений, чтобы корректно реагировать на ошибки, такие как отсутствующий файл или неправильный формат данных.
  • Оптимизация загрузки: Если у вас большое количество данных, операция загрузки может занять много времени. Для ускорения процесса можно использовать операции массовой вставки или временно отключить журналирование в SQLite.
  • Динамическое создание таблицы: В приведенных примерах мы создаем таблицу на основе заголовков из файла. Если структура вашего файла изменяется, это может вызвать проблемы. На практике рекомендуется либо иметь фиксированную структуру таблицы, либо реализовать логику, которая проверяет и адаптирует структуру таблицы при необходимости.
  • Безопасность: Импорт данных из внешних источников всегда связан с рисками безопасности. Убедитесь, что вы проверяете и очищаете данные перед импортом, чтобы избежать возможных атак или коррупции данных.
  • Преобразование типов данных: SQLite имеет гибкую систему типов данных. Однако, при импорте из CSV или Excel может потребоваться явное преобразование типов данных для корректного сохранения в базе данных.
  • Дополнительные библиотеки: Если вы столкнетесь с особыми требованиями, существуют дополнительные библиотеки и инструменты, например, pandas, который упрощает импорт данных из различных источников и их последующую обработку.

Заключение

Python предоставляет мощные инструменты для работы с различными форматами данных и базами данных. Используя приведенные выше примеры, вы можете легко импортировать данные из CSV или Excel файлов в базу данных SQLite. Если у вас есть специфические требования или сложные структуры данных, вам, возможно, придется немного адаптировать приведенный код.

Содержание: