Приложения и программные решения так или иначе обрабатывают информацию, которую необходимо хранить на случай повторного воспроизведения и использования. Обычно для этого применяют системы управления или серверы баз данных, а в небольших проектах достаточно создать БД с использованием библиотеки SQLAlchemy Python.
SQLAlchemy — это библиотека с открытым исходным кодом, созданная для синхронизации объектов Python с записями реляционных баз данных: Oracle, PostgreSQL, Microsoft SQL Server и др. SQLAlchemy создает модель преобразования информации из базы данных в объекты Python. Библиотека состоит из двух компонентов: SQLAlchemy Core и SQLAlchemy ORM.
SQLAlchemy позволяет заменить одну базу данных другой с аналогичным наполнением в любой момент. Разработчикам необходимо всего лишь скорректировать часть кода с указанием типа используемого хранилища, но не переписывать его полностью.
SQLAlchemy позволяет формировать запросы через функции и выражения Python. Библиотека состоит из модулей и имеет высокий уровень масштабируемости. Она совместима с написанными вручную SQL-запросами.
Установите библиотеку через команду 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 для создания нового запроса. Функция покажет посты только интересующего нас автора:
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_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_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 на практике.