Довольно часто возникают задачи заполнения базы данных из каких-либо внешних источников. В данном примере показано как можно наполнить базу данных (SQLlite) данными из xlsx файла.
В разработке я использую PyCharm 2018.3.3 Professoinal. Python 3.7
Используемые библитеки sqlite3 — работа с базой данных, openpyxl — работа с excel
1. Создайте новый проект Python и добавьте .py файл
2. Добавьте в проект базу данных и сделайте тестовый connect.
3. Программу можно разбить на три части:
1. Подключение к базе и создание таблицы
2. Чтение xlsx файла с данными
3. Запись в базу и закрытие соединения
Исходный файл, который необходимо переложить в SQL
После запуска программы у вас должна появиться таблица cars с точно такими же данными
import os import sqlite3 import openpyxl def export_to_sqlite(): '''Экспорт данных из xlsx в sqlite''' # 1. Создание и подключение к базе # Получаем текущую папку проекта prj_dir = os.path.abspath(os.path.curdir) a = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Имя базы base_name = 'auto.sqlite3' # метод sqlite3.connect автоматически создаст базу, если ее нет connect = sqlite3.connect(prj_dir + '/' + base_name) # курсор - это специальный объект, который делает запросы и получает результаты запросов cursor = connect.cursor() # создание таблицы если ее не существует cursor.execute('CREATE TABLE IF NOT EXISTS cars (brand text, model text, distance int , year int)') # 2. Работа c xlsx файлом # Читаем файл и лист1 книги excel file_to_read = openpyxl.load_workbook('Cars.xlsx', data_only=True) sheet = file_to_read['Sheet1'] # Цикл по строкам начиная со второй (в первой заголовки) for row in range(2, sheet.max_row + 1): # Объявление списка data = [] # Цикл по столбцам от 1 до 4 ( 5 не включая) for col in range(1, 5): # value содержит значение ячейки с координатами row col value = sheet.cell(row, col).value # Список который мы потом будем добавлять data.append(value) # 3. Запись в базу и закрытие соединения # Вставка данных в поля таблицы cursor.execute("INSERT INTO cars VALUES (?, ?, ?, ?);", (data[0], data[1], data[2], data[3])) # сохраняем изменения connect.commit() # закрытие соединения connect.close() def clear_base(): '''Очистка базы sqlite''' # Получаем текущую папку проекта prj_dir = os.path.abspath(os.path.curdir) # Имя базы base_name = 'auto.sqlite3' connect = sqlite3.connect(prj_dir + '/' + base_name) cursor = connect.cursor() # Запись в базу, сохранение и закрытие соединения cursor.execute("DELETE FROM cars") connect.commit() connect.close() # Запуск функции export_to_sqlite()