Pull to refresh
1171.83
OTUS
Цифровые навыки от ведущих экспертов

Практические примеры работы с БД на Python

Reading time5 min
Views1.9K

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

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

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

А для обеспечения асинхронной работы мы воспользуемся Asyncio. Это популярная библиотека для написания асинхронного кода на Python, которая предоставляет эффективный способ работы с базами данных.

Настраиваем среду

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

pip install sqlalchemy[asyncio]   # Или `pip install 'sqlalchemy[asyncio]'` для zsh

pip install asyncpg

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

Работа с SQLAlchemy

SQLAlchemy — программная библиотека на языке Python для работы с реляционными СУБД с применением технологии Object Relational Mapping (ORM), комплекса программ, позволяющих работать с базами данных, как если бы они были объектами языка программирования.

Библиотека служит для синхронизации объектов Python и записей реляционной базы данных. SQLAlchemy позволяет описывать структуры баз данных и способы взаимодействия с ними на языке Python без использования языка запросов SQL.

SQLAlchemy может использоваться как back-end для баз данных: MySQL, PostgreSQL, SQLite, Oracle и других. Причем, между БД можно переключаться просто изменяя конфигурации.

Использовать SQLAlchemy достаточно просто: необходимо импортировать библиотеку и создать подключение к базе данных. В следующем коде показано, как создать подключение к базе данных PostgreSQL с помощью SQLAlchemy:

from sqlalchemy import create_engine

from sqlalchemy.orm import Session

engine = create_engine('postgresql://user:password@host:port/database')

# Пример строки подключения `postgresql://user:myawesomepassword@localhost:5432/mydb`

session = Session(engine, future=True)

В приведенном выше коде мы создаем подключение к базе данных PostgreSQL с помощью функции create_engine. Затем мы создаем объект Session, который можно использовать для взаимодействия с базой данных.

Создание модели данных

После того, как мы успешно подключились к базе данных, мы можем создать модель для работы с данными, которые вы хотите сохранить в БД:

from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Integer, String

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)

В приведенном выше фрагменте кода мы создаем модель для пользователя. Мы определяем имя таблицы и столбцы, используя значения __tablename__ и Column соответственно.

Создаем и запрашиваем данные

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

from sqlalchemy import create_engine
from sqlalchemy.orm import Session

engine = create_engine('postgresql://user:password@host:port/database')
session = Session(engine, future=True)

# Создание нового пользователя
new_user = User(name='John Doe', email='john@gmail.com')
session.add(new_user)
session.commit()

# Запрос всех пользователей
users = session.execute(select(User)).all()
for user in users:
    print(user.name, user.email)

В приведенном выше коде мы создаем нового пользователя и добавляем его в базу данных с помощью функции add. Затем мы фиксируем изменения с помощью функции commit. Наконец, мы запрашиваем всех пользователей с помощью функции query и выводим их имена и электронные адреса.

Как видно, мы выполнили все этими операции с данными без использования команд языка SQL (SELECT, INSERT и т.д.) То есть, разработчику приложения не нужно знать SQL и писать запросы на этом языке. Вместо этого достаточно хорошо разбираться в функциях SQLAlchemy.

Объединяем усилия

Теперь, когда мы увидели, как работать с SQLAlchemy, давайте рассмотрим, как можно совместно использовать asyncio с SQLAlchemy. Для выполнения запроса по пользователям мы можем использовать следующий код:

import asyncio
from sqlalchemy import MetaData
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession

meta = MetaData()
 

async def main():
    engine = create_async_engine('postgresql+asyncpg://user:password@host:port/database')
    async with engine.begin() as conn:
        await conn.run_sync(meta.create_all)

    async with AsyncSession(engine) as session:
        async with session.begin():
            # Создание нового пользователя
            new_user = User(name='John Doe', email='john@gmail.com')
            session.add(new_user)

        # Запрашиваем всех пользователей
        async with session.begin():
            users = await session.execute(select(User))
            async for user in users:
                print(user.name, user.email)

loop = asyncio.get_event_loop()
loop.run_until_complete(main())
 

В приведенном выше коде мы создаем асинхронный движок, используя функцию create_async_engine из библиотеки SQLAlchemy. Затем мы создаем сами таблицы, используя функцию create_all.

Чтобы создать нового пользователя, мы используем функцию добавления session.add(new_user) внутри транзакции. Затем мы запрашиваем всех пользователей, используя функцию execute внутри транзакции, и выводим их имена и электронные адреса.

Заключение

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

Все необходимые навыки и знаниядля программирования на Python можно получить на специализации «Python Developer».

Tags:
Hubs:
+2
Comments4

Articles

Information

Website
otus.ru
Registered
Founded
Employees
101–200 employees
Location
Россия
Representative
OTUS