Экспорт из Excel в базу SQLite
Довольно часто возникают задачи заполнения базы данных из каких-либо внешних источников. В данном примере показано как можно наполнить базу данных (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()
Комментарии
Добавить комментарий