- А вы знаете о том, что в Python есть встроенная СУБД?
- Импорт модуля
- Создание подключения к БД
- Создание таблицы
- Вставка записей в таблицу
- Выполнение запросов к базе данных
- Итоги
- Как создать базу данных SQLite на Python
- Создать базу данных SQLite на Python
- Шаг 1. Импортируйте пакет sqlite3
- Шаг 2. Используйте функцию connect()
- Шаг 3. Создайте таблицу базы данных
- Шаг 4: Зафиксируйте эти изменения в базе данных.
- Шаг 5: Закройте соединение.
- Вывод
- Источник:
А вы знаете о том, что в Python есть встроенная СУБД?
Если вы — программист, то я полагаю, что вы, наверняка, знаете о существовании чрезвычайно компактной и нетребовательной к ресурсам СУБД SQLite, или даже пользовались ей. Эта система обладает практически всеми возможностями, которых можно ожидать от реляционной СУБД, но при этом всё хранится в единственном файле. Вот некоторые сценарии использования SQLite, упомянутые на официальном сайте этой системы:
- Встраиваемые устройства и IoT.
- Анализ данных.
- Перенос данных из одной системы в другую.
- Архивирование данных и (или) упаковка данных в контейнеры.
- Хранение данных во внешней или временной БД.
- Заменитель корпоративной БД, используемый в демонстрационных или испытательных целях.
- Обучение, освоение начинающими практических приёмов работы с БД.
- Прототипирование и исследование экспериментальных расширений языка SQL.
Данный материал посвящён использованию SQLite в Python-разработке. Поэтому для нас особенно важно то, что эта СУБД, представленная модулем sqlite3 , входит в стандартную библиотеку языка. То есть оказывается, что для работы с SQLite из Python-кода не нужно устанавливать некое клиент-серверное ПО, не нужно поддерживать работу какого-то сервиса, отвечающего за работу с СУБД. Достаточно лишь импортировать модуль sqlite3 и приступить к его использованию в программе, получив в своё распоряжение систему управления реляционными базами данных.
Импорт модуля
Выше я говорил о том, что SQLite — это СУБД, встроенная в Python. Это значит, что для того чтобы приступить к работе с ней, достаточно импортировать соответствующий модуль, не выполняя предварительно его установку с помощью команды вроде pip install . Команда импорта SQLite выглядит так:
Создание подключения к БД
Для организации подключения к базе данных SQLite не нужно беспокоиться об установке драйверов, о подготовке строк подключения и о прочих подобных вещах. Создать базу данных и получить в своё распоряжение объект подключения к ней можно очень просто и быстро:
Выполнив эту строку кода, мы создадим базу данных и подключимся к ней. Дело тут в том, что база данных, к которой мы подключаемся, пока не существует, поэтому система автоматически создаёт новую пустую БД. Если же база данных уже создана (предположим, это my-test.db из предыдущего примера), для того чтобы к ней подключиться, достаточно воспользоваться точно таким же кодом.
Файл только что созданной базы данных
Создание таблицы
Теперь давайте создадим таблицу в нашей новой БД:
with con: con.execute(""" CREATE TABLE USER ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER ); """)
Тут описано добавление в БД таблицы USER с тремя столбцами. Как видите, SQLite — это и правда очень простая в работе СУБД, но она обладает всеми основными возможностями, наличия которых можно ожидать от обычной системы управления реляционными базами данных. Речь идёт о поддержке типов данных, в том числе — типов, допускающих значение null , о поддержке первичного ключа и автоинкремента.
Если этот код функционирует так, как ожидается (вышеприведённая команда, правда, ничего не возвращает), в нашем распоряжении окажется таблица, готовая к дальнейшей работе с ней.
Вставка записей в таблицу
Вставим несколько записей в таблицу USER , которую мы только что создали. Это, кроме прочего, даст нам доказательство того, что таблица, и правда, была создана вышеприведённой командой.
Представим, что нам нужно добавить в таблицу несколько записей одной командой. В SQLite сделать это очень просто:
sql = 'INSERT INTO USER (id, name, age) values(?, ?, ?)' data = [ (1, 'Alice', 21), (2, 'Bob', 22), (3, 'Chris', 23) ]
Здесь нам нужно определить SQL-выражение со знаками вопроса ( ? ) в виде местозаполнителей. Учитывая то, что в нашем распоряжении есть объект подключения к базе данных, мы, подготовив выражение и данные, можем вставить записи в таблицу:
with con: con.executemany(sql, data)
Сообщений об ошибках после выполнения этого кода не поступает, а это значит, что данные успешно добавлены в таблицу.
Выполнение запросов к базе данных
Теперь пришло время узнать о том, правильно ли отработали команды, которые мы только что выполняли. Давайте выполним запрос к БД и попробуем получить из таблицы USER какие-то данные. Например — получим записи, относящиеся к пользователям, возраст которых не превышает 22 года:
with con: data = con.execute("SELECT * FROM USER WHERE age
Результат выполнения запроса к БД
Как видите, то, что было нужно, получить удалось. И сделать это было очень просто.
Кроме того, даже хотя SQLite — простая СУБД, она отличается крайне широкой поддержкой. Поэтому с ней можно работать, используя большинство SQL-клиентов.
Я пользуюсь DBeaver. Предлагаю взглянуть на то, как это выглядит.
Подключение к базе данных SQLite из SQL-клиента (DBeaver)
Я пользуюсь облачным сервисом Google Colab и хочу загрузить файл my-test.db на свой компьютер. Если же вы экспериментируете с SQLite на компьютере, то это значит, что вы, без необходимости скачивать откуда-то файл базы данных, можете подключиться к ней, используя SQL-клиент.
В случае с DBeaver для подключения к БД SQLite нужно создать новое подключение и выбрать, в качества типа базы данных, SQLite.
Подготовка подключения в DBeaver
Затем надо найти файл базы данных.
Подключение файла базы данных
После этого можно выполнять SQL-запросы к базе данных. Тут нет ничего особенного, отличающегося от работы с обычными реляционными БД.
Выполнение запросов к базе данных
Интеграция с pandas
Думаете, на этом мы завершим разговор о поддержке SQLite в Python? Нет, нам ещё есть о чём поговорить. А именно, так как SQLite — это стандартный Python-модуль, эта СУБД легко интегрируется с дата-фреймами pandas.
Для сохранения датафрейма в БД можно просто воспользоваться его методом to_sql() :
Вот и всё! Нам даже не нужно заранее создавать таблицу. Типы данных и характеристики полей будут настроены автоматически, на основании характеристик датафрейма. Конечно, вы, если надо, можете настроить всё самостоятельно.
Теперь, предположим, нам нужно получить объединение таблиц USER и SKILL и записать полученные данные в датафрейм pandas. Это тоже очень просто:
df = pd.read_sql(''' SELECT s.user_id, u.name, u.age, s.skill FROM USER u LEFT JOIN SKILL s ON u.id = s.user_id ''', con)
Чтение данных из БД в датафрейм pandas
Замечательно! А теперь давайте запишем то, что у нас получилось, в новую таблицу с именем USER_SKILL :
С этой таблицей, конечно, можно работать и пользуясь SQL-клиентом.
Применение SQL-клиента для работы с базой данных
Итоги
В Python, безусловно, есть много приятных неожиданностей, которые, если специально их не искать, можно и не заметить. Специально подобные возможности никто не прятал, но из-за того, что в Python встроено очень много всего, на некоторые из таких возможностей можно просто не обратить внимания, или, откуда-то о них узнав, просто о них забыть.
Здесь я рассказал о том, как использовать встроенную в Python библиотеку sqlite3 для создания баз данных и для работы с ними. Конечно, такие БД поддерживают не только операцию добавления данных, но и операции изменения и удаления информации. Полагаю, вы, узнав о sqlite3 , испытаете всё это сами.
Очень важно то, что SQLite отлично стыкуется с pandas. Данные из БД очень легко считывать, помещая в датафреймы. Не менее проста и операция по сохранению содержимого датафреймов в базу данных. Это ещё сильнее упрощает использование SQLite.
Предлагаю всем, кто дочитал до этого места, заняться собственными исследованиями в поиске интересных возможностей Python!
Код, который я демонстрировал в этой статье, можно найти здесь.
Пользуетесь ли вы SQLite в своих Python-проектах?
Как создать базу данных SQLite на Python
SQLite - это легкая и простая в настройке система управления реляционными базами данных. SQLite не требует сервера, что является его самым большим преимуществом. В отличие от других СУБД, таких как MySQL или PostgreSQL, не требуется сервер для запуска базы данных. Таким образом, нам не нужна установка.
Базы данных SQLite хранятся локально вместе с файлами, хранящимися на диске. Это значительно ускоряет доступ к данным в базе данных и управление ими.
Все транзакции в SQLite соответствуют требованиям ACID.
Создать базу данных SQLite на Python
Чтобы создать базу данных SQLite на Python, используйте встроенный модуль sqlite3. Модуль sqlite3 предоставляет API, с помощью которого вы можете создавать базу данных. Он совместим с API базы данных Python. Не требует никаких внешних библиотек.
Создадим базу данных SQLite на Python.
Шаг 1. Импортируйте пакет sqlite3
Первый шаг - импортировать пакет sqlite3:
Он предоставляет API, который понадобится для создания базы данных.
Шаг 2. Используйте функцию connect()
Используйте функцию sqlite3.connect() для создания базы данных. Будет создан объект подключения.
connection = sqlite3.connect('shows.db')
Имя нашей базы данных - «shows.db». Сохраняем подключение к объекту подключения.
В следующий раз, когда мы запустим этот файл app.py , он просто подключается к базе данных, и если базы данных нет, он создаст ее.
Шаг 3. Создайте таблицу базы данных
Чтобы создать таблицу в базе данных, нам нужно использовать объект курсора. Чтобы создать объект курсора, используйте метод connection.cursor() .
С помощью этого объекта курсора мы теперь можем выполнять команды и запросы в базе данных.
Наша первая команда - создать таблицу Shows .
Используйте метод cursor.execute() , чтобы написать запрос CREATE TABLE.
cursor.execute('''CREATE TABLE IF NOT EXISTS Shows (Title TEXT, Director TEXT, Year INT)''')
В этом коде мы написали команду, которая создаст таблицу с ее именами столбцов и типами данных.
Шаг 4: Зафиксируйте эти изменения в базе данных.
Чтобы зафиксировать изменения в базе данных, используйте метод connection.commit() .
Шаг 5: Закройте соединение.
Последний шаг - закрыть соединение с помощью функции connection.close() .
Вот и все. См. следующий полный код для создания базы данных SQLite на Python.
import sqlite3 connection = sqlite3.connect('shows.db') cursor = connection.cursor() cursor.execute('''CREATE TABLE IF NOT EXISTS Shows (Title TEXT, Director TEXT, Year INT)''') connection.commit() connection.close()
После запуска файла вы увидите, что в вашем текущем каталоге проекта создан один файл с именем shows.db. Это файл базы данных SQLite, созданный Python.
Вывод
Вы можете видеть, что подключить Python к базе данных SQLite очень просто, и управлять данными из кода Python также легко. Вам необходимо хорошо разбираться в SQL, и это все, что вам нужно для работы с реляционной базой данных. Это все для Python с базой данных SQLite.