Python локальные базы данных

А вы знаете о том, что в Python есть встроенная СУБД?

Если вы — программист, то я полагаю, что вы, наверняка, знаете о существовании чрезвычайно компактной и нетребовательной к ресурсам СУБД SQLite, или даже пользовались ей. Эта система обладает практически всеми возможностями, которых можно ожидать от реляционной СУБД, но при этом всё хранится в единственном файле. Вот некоторые сценарии использования SQLite, упомянутые на официальном сайте этой системы:

  • Встраиваемые устройства и IoT.
  • Анализ данных.
  • Перенос данных из одной системы в другую.
  • Архивирование данных и (или) упаковка данных в контейнеры.
  • Хранение данных во внешней или временной БД.
  • Заменитель корпоративной БД, используемый в демонстрационных или испытательных целях.
  • Обучение, освоение начинающими практических приёмов работы с БД.
  • Прототипирование и исследование экспериментальных расширений языка SQL.

Данный материал посвящён использованию SQLite в Python-разработке. Поэтому для нас особенно важно то, что эта СУБД, представленная модулем sqlite3 , входит в стандартную библиотеку языка. То есть оказывается, что для работы с SQLite из Python-кода не нужно устанавливать некое клиент-серверное ПО, не нужно поддерживать работу какого-то сервиса, отвечающего за работу с СУБД. Достаточно лишь импортировать модуль sqlite3 и приступить к его использованию в программе, получив в своё распоряжение систему управления реляционными базами данных.

Читайте также:  Upload by java security

Импорт модуля

Выше я говорил о том, что 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.

Источник:

Источник

Оцените статью