Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Работа с базами данных SQL в Python: подробный гайд

28075
14 минут чтения
Средний рейтинг статьи: 3

В современном мире, где объем информации стремительно растет, ее эффективная обработка становится ключевым моментом в любой сфере человеческой деятельности. В этом контексте базы данных (БД) становятся своего рода хранилищем, позволяя не только сохранять информацию, но и грамотно управлять ей. В инструкции ниже мы ознакомимся с тем, как происходит работа с базами данных в Python.

Значимую роль в организации БД играет SQL (Structured Query Language). Этот язык запросов предоставляет удобный способ взаимодействия с данными, позволяя создавать, изменять и извлекать информацию. Сочетание Python и SQL предоставляет удобные средства для автоматизации процессов, а также позволяет разработчикам создавать гибкие и масштабируемые приложения. 

Image3

Работа с SQL в Python осуществляется через системы управления базами данных. Существует множество СУБД, каждая со своими особенностями и назначениями. От классических реляционных баз данных, таких как MySQL и PostgreSQL, до NoSQL-решений, таких как MongoDB, выбор подходящей СУБД зависит от конкретных требований проекта. В рамках данной инструкции мы рассмотрим такие системы, как:

  • SQLite;
  • MySQL;
  • PostgreSQL.

В этом гайде мы разберем ключевые шаги взаимодействия с базами данных SQL в Python, предоставив подробную инструкцию по использованию основных операций на примере различных СУБД. Начнем с установки библиотек и подключения к базе данных.

Миграция в облако

Перенесем вашу инфраструктуру в облако — быстро,
безопасно и с гарантией результата.

Предоставим грант до 1 000 000 ₽ на облачную
инфраструктуру и возьмем на себя весь процесс.

Установка необходимых библиотек

До начала работы с SQL базами данных в Python необходимо установить соответствующие библиотеки. Каждая БД имеет свой пакет, рассмотрим некоторые из них.

Для работы с SQLite необходимо библиотека sqlite3. Эта библиотека входит в стандартную библиотеку Python, поэтому ее нет необходимости устанавливать отдельно. Но для работы с MySQL и PostgreSQL установим библиотеки.

Для MySQL:

    

Для PostgreSQL:

    

Общий способ установки для большинства БД:

    

Библиотека SQLAlchemy предоставляет уровень абстракции над различными СУБД, что дает возможность разработчикам взаимодействовать с разными системами, не требуя изменения основного кода. Кроме того, она включает механизм ORM (Object-Relational Mapping), который необходим для обеспечения работы с БД, представляя информацию в виде объектов Python. Вместо написания прямых SQL-запросов, вы можете взаимодействовать с БД, используя объекты Python, которые отображают таблицы в базе данных. 

После установки соответствующих библиотек мы сможем устанавливать соединение с базой данных SQL прямо из среды выполнения Python. 

Установка соединения с базой данных

Установка связи с БД SQL является значимым этапом перед началом работы с хранилищем информации. Этот шаг обеспечивает взаимодействие между вашим кодом на Python и физическим хранилищем информации. Процесс подключения зависит от используемой СУБД.

Для взаимодействия с БД SQLite необходимо импортировать библиотеку sqlite3, а затем выполнить подключение к БД, хранящейся в файле:

    

Если файл БД не существует, то он автоматически создастся. 

Для взаимодействия с БД MySQL в Python применяется библиотека mysql.connector. Рассмотрим пример использования этой библиотеки для установки соединения:

    

В этом примере: 

  • your_actual_host — это ваш адрес хоста в БД MySQL;
  • your_actual_user — это ваше имя пользователя для доступа к БД;
  • your_actual_password — это ваш пароль для пользователя;
  • your_actual_database — это ваше имя БД, с которой вы хотите взаимодействовать. 

Для взаимодействия с БД PostgreSQL в Python применяется библиотека psycopg2. Пример использования psycopg2 для создания соединения:

    

В случае использования SQLAlchemy подключение может быть выполнено следующим образом: 

    

Если вы используете SQLAlchemy, URL — это стандартный способ представления параметров подключения. Он может включать информацию о хосте, пользователе, пароле, порте и других параметрах, зависящих от типа БД. 

После успешного создания соединения (connection) следующим шагом является создание объекта курсора. Курсор обеспечивает программу интерфейсом для перемещения по результатам запроса, извлечения информации и внесения изменений в записи. Этот шаг не зависит от используемой БД, поскольку он обеспечивает общий интерфейс для выполнения SQL-запросов:

    

Теперь все готово для выполнения SQL-запросов в Python и взаимодействия с базой данных. 

Когда вы завершаете работу с курсором, например, после выполнения всех операций, важно закрыть как курсор, так и соединение: 

    

Это критически важно для эффективного управления ресурсами и предотвращения утечек памяти.

После успешного установления связи с базой данных вы готовы приступить к выполнению SQL-запросов и различных операций.

Формирование таблиц и схем в СУБД

Перед началом взаимодействия с БД потребуется создать таблицу SQL в Python. Таблицы представляют собой сущности, где каждая строка соответствует конкретной записи, а столбцы определяют различные атрибуты этой записи. Это важный этап проектирования базы данных, где определяются структура и типы записей, которые будут храниться в БД. 

Рассмотрим пример создания для SQLite:

    

Этот SQL-запрос определяет таблицу products с полями: 

  • product_id, уникальный идентификатор продукта, который служит в качестве первичного ключа;
  • product_nm, текстовое поле для наименования продукта. NOT NULL указывает, что это поле обязательно должно содержать информацию;
  • price, цена продукта, может содержать десятичные значения;
  • stock_quantity, количество продуктов в наличии на складе, это поле может содержать только целые числа.

Комбинация всех этих полей создает таблицу, в которой каждая запись (строка) представляет отдельный продукт, а каждый столбец содержит информацию об этом продукте. 

После создания таблицы необходимо выполнить SQL-запрос в Python и применить изменения:

    

После выполнения этих шагов у вас будет создана таблица products в БД SQLite, готовая к использованию. Мы можем открыть базу данных в каком-нибудь браузере баз данных SQLite, например, в DB Browser for SQLite и увидеть созданную таблицу:

Image8

Обратите внимание, что создание таблицы требуется выполнить только один раз, из-за этого существует проверка IF NOT EXISTS (если не существует), перед началом работы с БД. 

Аналогичным образом напишем SQL-запрос для создания таблицы для MySQL:

    

И рассмотрим создание таблицы products в БД PostgreSQL:

    

Все эти примеры демонстрируют создание таблиц для разных СУБД. Вы можете адаптировать SQL-запросы в зависимости от ваших требований к структуре БД.

Выполнение запросов SQL с использованием Python

После успешного формирования таблиц мы переходим к осуществлению основных операций, известных как операции CRUD (Create, Read, Update, Delete). Эти процедуры предоставляют возможность добавлять, читать, обновлять и удалять информацию в БД. Давайте рассмотрим каждую из этих операций более подробно.

  1. Операция CREATE в SQL отвечает за создание новых записей в таблице. Она позволяет добавлять записи, указывая значения для каждого столбца. Для этого мы используем оператор INSERT. Приведем примеры добавления новой записи для каждой из рассматриваемых баз данных. 

Добавим информацию о новом продукте в таблицу, которую мы создавали в предыдущем разделе:  

    

SQL-запрос для добавления записей для SQLite:

    

Если мы теперь посмотрим на содержимое нашей базы данных, то найдем там добавленный объект: 

Image2

SQL-запрос для добавления записей для MySQL и PostgeSQL будет одинаковым:

    

После написания SQL-запроса для любой СУБД необходимо прописать команду для выполнения SQL-запроса:

    

Команда cursor.execute() выполняет запрос, используя переданный SQL-запрос и данные, и добавляет новую запись в БД, а команда connection.commit() применяет изменения. 

  1. Операция READ предоставляет возможность извлечения данных из таблицы. Для выполнения процедуры чтения записей из таблицы воспользуемся оператором SELECT. Общий синтаксис для всех трех СУБД (SQLite, MySQL и PostgreSQL): 
    

В приведенном выше коде мы формируем SQL-запрос для выборки всех данных из таблицы products, выполняем SQL-запрос с помощью курсора, получаем результат выборки и выводим результат:

Image5

  1. Операция UPDATE применяется для изменения существующих записей. Для этого используется оператор UPDATE. Изменим цену продукта с product_id = 1 на новое значение 109.99:
    

SQL-запрос для добавления записей для SQLite:

    

Можем убедиться, что данные в БД изменились: 

Image6

SQL-запрос для добавления записей для MySQL и PostgreSQL будет одинаковым:

    
  1. Операция DELETE позволяет удалить записи из таблицы. Для этого также используется оператор DELETE.

Пример для SQLite

    

Теперь запись, которую мы сделали до этого, отсутсвует: 

Image1

Для MySQL и PostgreSQL синтаксис будет одинаковый:

    

Мы ранее упоминали, как важно правильно завершать взаимодействие с БД. После выполнения всех операций CRUD не забывайте о завершающих действиях: закрытие курсора и разъединение:

    

Теперь, когда мы освоили основы операций CRUD, давайте подробнее рассмотрим возможности SQL в Python. Рассмотрим варианты улучшения эффективности запросов с применением индексов, обеспечим сохранность информации при помощи транзакций, и также рассмотрим вопрос о создании триггеров для автоматизации определенных процессов. 

Оптимизация поиска в базах данных

Индексы — это структуры данных, связанные с значениями в одном или нескольких столбцах таблицы. Эти структуры обеспечивают быстрый доступ БД к конкретным значениям, что существенно улучшает выполнение запросов. Создание индекса дополняет БД дополнительной структурой данных, представляющей собой отсортированный список уникальных значений выбранных столбцов. Такой подход сокращает количество строк, которые необходимо просматривать для поиска конкретной информации.

Для создания индекса используется оператор CREATE INDEX. Пример создания индекса для оптимизации поиска по столбцу product_nm в таблице products:

    

В данном примере: 

  • idx_product_nm — название индекса;
  • products — название таблицы;
  • product_nm — название столбца, для которого создается индекс.

Обеспечение целостности данных

Транзакции отвечают за целостность информации в базе данных. Они гарантируют, что серия операций выполняется атомарно, то есть, либо все изменения применяются успешно, либо ни одно из них не выполняется. Рассмотрим, как работать с транзакциями в контексте SQLite.

В SQLite транзакции автоматически выполняются каждый раз, когда вы выполняете операцию изменения записей (INSERT, UPDATE, DELETE). Если действия выполнены успешно, изменения сохраняются, в противном случае — откатываются: 

    

В этом примере мы используем блок try-except-finally для обработки транзакций. Если какая-либо операция в блоке try вызывает исключение, транзакция откатывается rollback(). В противном случае изменения подтверждаются методом commit(). При успешном выполнении в БД произойдет изменение записи: 

Image7

На консоль будет выведен текст об успешном выполнении транзакции: 

Image4

Для MySQL и PostgreSQL синтаксис транзакций будет аналогичным с SQLite. Оба языка поддерживают стандартные операции COMMIT и ROLLBACK для управления транзакциями. Не забудьте о том, что для подстановки параметров в MySQL и PostgreSQL используется %s

Автоматизация реакций на события

Триггеры представляют собой уникальный вид хранимых процедур, которые автоматически активируются при возникновении определенных событий в базе данных. Они служат механизмом для автоматизации реакции на изменения информации, будь то вставка новых записей, обновление существующих или удаление определенных записей. 

В SQLite триггеры могут быть активированы для событий INSERT, UPDATE и DELETE. Например, у нас есть таблица orders с полями order_id, product_nm и quantity, и мы хотим создать триггер, который при каждом добавлении нового заказа автоматически уменьшает количество товара в таблице inventory:

    

Триггер decrease_inventory создается после операции INSERT на таблице orders. Он автоматически вызывается при добавлении нового заказа. Внутри триггера происходит обновление количества товара в таблице inventory на основе данных, вставленных в таблицу orders.

Синтаксис для аналогичного триггера, который будет выполнять ту же самую задачу, но уже в MySQL не отличается от синтаксиса SQLite, за исключением ключевого слова FOR EACH ROW, которое указывает на то, что триггер должен выполняться отдельно для каждой строки, затронутой операцией, которую вызвал триггер (в SQLite триггеры по умолчанию рассматриваются, как триггеры для каждой строки FOR EACH ROW, поэтому не требуется явно указывать это). Данное ключевое слово необходимо прописать перед началом блока BEGIN … END.

В PostgreSQL синтаксис триггеров немного отличается. Для начала необходимо создать функцию для триггера:

    

После этого происходит создание самого триггера:

    

Подготовили для вас выгодные тарифы на DBaaS

Cloud DB 1/1/8

447 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
Диск NVMe
8 ГБ
Приватный IP
Есть
Резервные копии
Есть
Cloud DB 1/2/20

711 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
Диск NVMe
20 ГБ
Приватный IP
Есть
Резервные копии
Есть
Таблица тарифов
Сравнение тарифов
Cloud DB 1/1/8
496
Cloud DB 1/2/20
790
Cloud DB 2/2/30
1160
Cloud DB 2/4/40
1580
Cloud DB 4/8/80
3160
Cloud DB 4/12/120
4240
Cloud DB 6/12/180
5460
Cloud DB 8/16/220
7040
Процессор1 x 3.3 ГГц1 x 3.3 ГГц2 x 3.3 ГГц2 x 3.3 ГГц4 x 3.3 ГГц4 x 3.3 ГГц6 x 3.3 ГГц8 x 3.3 ГГц
Память1 ГБ2 ГБ2 ГБ4 ГБ8 ГБ12 ГБ12 ГБ16 ГБ
Диск NVMe8 ГБ20 ГБ30 ГБ40 ГБ80 ГБ120 ГБ180 ГБ220 ГБ
Приватный IPЕстьЕстьЕстьЕстьЕстьЕстьЕстьЕсть
Резервные копииЕстьЕстьЕстьЕстьЕстьЕстьЕстьЕсть

Заключение

В данной инструкции мы детально исследовали основы взаимодействия с базами данных, используя язык программирования Python. Теперь вы умеете подключаться к БД и создавать таблицы, а также использовать основные операции CRUD для эффективного управления данными. Мы также рассмотрели аспекты работы с индексами, проведение транзакций и использование триггеров.

Этот гайд служит введением в Python SQL. Дальнейшие шаги могут включать в себя изучение более сложных запросов, оптимизацию производительности и использование более продвинутых функций, специфичных для каждой конкретной СУБД.

28075
14 минут чтения
Средний рейтинг статьи: 3

Читайте также

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server