Работа с базами данных в Python с помощью SQLAlchemy: пошаговое руководство

Читать в полной версии →

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

Что такое SQLAlchemy Python

SQLAlchemy — это библиотека с открытым исходным кодом, созданная для синхронизации объектов Python с записями реляционных баз данных: Oracle, PostgreSQL, Microsoft SQL Server и др. SQLAlchemy создает модель преобразования информации из базы данных в объекты Python. Библиотека состоит из двух компонентов: SQLAlchemy Core и SQLAlchemy ORM.

Особенности SQLAlchemy Python

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

SQLAlchemy позволяет формировать запросы через функции и выражения Python. Библиотека состоит из модулей и имеет высокий уровень масштабируемости. Она совместима с написанными вручную SQL-запросами.

С чего начать работу в SQLAlchemy Python

Установите библиотеку через команду  pip install sqlalchemy.

Библиотека SQLAlchemy поддерживает ряд диалектов для связи с различными базами: PostgreSQL, Oracle, Microsoft SQL Server (MS SQL), MySQL, SQLite. Рассмотрим основные шаги по подключению и управлению базами данных.

Добавляем таблицу

Для начала необходимо настроить подключение к базе данных и создать объект engine. Он отвечает за управление базой данных и выполнение запросов SQL:

import sqlalchemy as db

engine = db.create_engine('sqlite:///myDatabase.db')

Команда conn = engine.connect()подключит базу, а metadata = db.MetaData()будет хранить данные о ее устройстве.

Теперь можно создавать объект «‎таблица». Пусть это будет база данных с постами в социальных сетях ‎и комментариями к ним:

posts = db.Table('posts', metadata,

db.Column('post_id', db.Integer, primary_key=True),

db.Column('post_name', db.Text),

db.Column('post_author', db.Text),

db.Column('post_date', db.String),

db.Column('post_is_commented', db.Boolean, default=False)

)

Используем следующую команду, чтобы создать объект и запустить наш код: metadata.create_all(engine)

База будет выглядеть так:

post_id post_name post_author post_date post_is_commented

Заполняем таблицу

Для добавления элементов в нашу базу необходимо создать запрос в виде объекта.

insertion_query = posts.insert().values([

{'post_name':'5 способов заработать на фрилансе', 'post_author':'Миша Романов', 'post_date': '18.05.24'},

{'post_name':'Легкий способ набрать подписчиков', 'post_author':'Иван Демидов', 'post_date': '19.05.24'}

])

Столбцы post_id и post_is_commented заполняются автоматически. Для передачи этого запроса в базу данных и внесения новой записи мы будем использовать команду conn.execute(insertion_query)

Теперь наша база выглядит так:

post_id post_name post_author post_date post_is_commented
1 5 способов заработать на фрилансе Миша Романов 18.05.24 False
2 Легкий способ набрать подписчиков Иван Демидов 19.05.24 False

База данных с постами готова! Самое время попробовать выполнить некоторые базовые манипуляции с ее данными — отфильтровать, обновить и удалить.

Фильтруем данные (where)

Используем стандартный метод where для создания нового запроса. Функция покажет посты только интересующего нас автора:

select_author_query = db.select([posts]).where(posts.columns.post_author==Миша Романов)

select_all_results = conn.execute(select_author_query)

print(select_all_results.fetchall())

Вывод:

[(1, '5 способов заработать на фрилансе', 'Миша Романов', '18.05.24', False)]

Обновляем данные (update)

Воспользуемся функцией update для внесения изменений в дату публикации одного из постов:

update_query = db.update(posts).where(posts.columns.post_name=='Легкий способ набрать подписчиков').values(post_date='19.04.24')

conn.execute(update_query)

Чтобы проверить обновления в консоли, отправим запрос:

select_all_query = db.select([posts])

select_all_results = conn.execute(select_all_query)

print(select_all_results.fetchall())

Вывод:


[(1, '5 способов заработать на фрилансе', 'Миша Романов', '18.05.24', False), (2, 'Легкий способ набрать подписчиков', 'Иван Демидов', '19.04.24', False)]

Удаляем данные (delete)

Ненужные записи в базе данных всегда можно удалить с помощью запроса:

delete_query = db.delete(posts).where(posts.columns.post_name=='5 способов заработать на фрилансе')

conn.execute(delete_query)

Для проверки успешности обновлений выведем данные в консоль с помощью запроса:

select_all_query = db.select([posts])

select_all_results = conn.execute(select_all_query)

print(select_all_results.fetchall())

Вывод:

[(2, 'Легкий способ набрать подписчиков', 'Иван Демидов', '19.04.24', False)]

Для корректного завершения работы с БД необходимо использовать команду conn.close().

Это базовые функции библиотеки SQLAlchemy Python  В рамках курса «Python-разработчик» вы изучите теорию и будете создавать и работать с базами данных, используя этот и другие инструменты Python на практике.