Skip to main content

aiopg

Асинхронная библиотека для работы с PostgreSQL, предоставляющая удобный интерфейс для управления подключениями, выполнения запросов и работы с репозиториями.

Возможности

  • Пул соединений: Эффективное управление подключениями к PostgreSQL
  • Асинхронные операции: Полная поддержка async/await для всех операций с базой данных
  • JSON поддержка: Встроенная поддержка JSONB с оптимизированными кодерами
  • Временные метки: Автоматическая обработка timestamp и timestamptz
  • Репозитории: Готовые абстракции для работы с данными
  • Система версионирования: Поддержка версионирования таблиц
  • Обработка ошибок: Специализированные исключения для различных сценариев

Установка

pip install aiopg

Быстрый старт

Создание пула соединений

from aiopg import create_db_pool

# Создание пула соединений
pool = create_db_pool(
    dsn="postgresql://user:password@localhost/dbname",
    min_size=5,
    max_size=20
)

Выполнение запросов

from aiopg import compile_query

# Компиляция и выполнение запроса
query = compile_query("SELECT * FROM users WHERE id = $1")
async with pool.acquire() as conn:
    result = await conn.fetch(query, user_id)

Работа с репозиториями

from aiopg.repository import PGDataAccessObject, TableDescriptor

# Определение таблицы
users_table = TableDescriptor("users", ["id", "name", "email"])

# Создание DAO
users_dao = PGDataAccessObject(pool, users_table)

# Операции с данными
user = await users_dao.get_by_id(user_id)
users = await users_dao.get_all()
await users_dao.insert({"name": "John", "email": "john@example.com"})

Транзакции

PostgresAccessLayer.transaction() объединяет вызовы всех DAO этого слоя в одну транзакцию на одном соединении — включая кастомные методы DAO, использующие fetch/fetchrow/fetchval. Commit при выходе из блока, rollback при исключении:

async with dal.transaction():
    wish = await dal.wishes.create(owner_id=user.id, **payload)
    await dal.wishlist_items.create(wishlist_id=default.id, wish_id=wish.id)

Вне блока поведение прежнее: каждый вызов берёт своё соединение из пула (autocommit).

  • Вложенные transaction() на том же пуле переиспользуют соединение и открывают savepoint: откат внутреннего блока не отменяет внешнюю транзакцию. ⚠️ До 0.3.0 вложенный вызов брал отдельное соединение с независимой транзакцией.
  • Несколько пулов в одном процессе изолированы: транзакция одного слоя не затрагивает запросы слоёв с другими пулами.
  • asyncio.gather внутри блока не поддерживается: соединение asyncpg нельзя использовать конкурентно, будет InterfaceError: another operation is in progress. Выполняйте вызовы последовательно.
  • asyncio.create_task внутри блока: таск наследует транзакционный контекст и обязан завершиться до выхода из блока, иначе он может обратиться к уже возвращённому в пул соединению.

Основные компоненты

Connection Pool

  • create_db_pool() - создание пула соединений с автоматической инициализацией кодеков

Query Compilation

  • compile_query() - компиляция SQL запросов для оптимизации

Repository Pattern

  • PGDataAccessObject - базовый DAO для работы с таблицами
  • PostgresAccessLayer - слой доступа к PostgreSQL
  • PGPoolManager - менеджер пулов соединений

Version Management

  • declare_version_table() - создание таблиц для версионирования

Требования

  • Python >= 3.8
  • PostgreSQL
  • asyncpg >= 0.27.0
  • psycopg2-binary >= 2.9.0

Лицензия

MIT License - см. файл LICENSE для подробностей.

Разработка

# Клонирование репозитория
git clone https://github.com/ascet-dev/adc-aiopg.git
cd adc-aiopg

# Установка зависимостей для разработки
pip install -e .

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

adc_aiopg-0.3.0.tar.gz (16.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

adc_aiopg-0.3.0-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file adc_aiopg-0.3.0.tar.gz.

File metadata

  • Download URL: adc_aiopg-0.3.0.tar.gz
  • Upload date:
  • Size: 16.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.2

File hashes

Hashes for adc_aiopg-0.3.0.tar.gz
Algorithm Hash digest
SHA256 d3bc233855be503fc93dacc1e34810d19a220bae7f142c6bc867342be355ae4b
MD5 2394a8317f347f02636f59cb2471ad97
BLAKE2b-256 65a7ee1b559da8ede31e537ef8c1a94a86bfe5d24ad15ffe2033582e1ba33f16

See more details on using hashes here.

File details

Details for the file adc_aiopg-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: adc_aiopg-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.2

File hashes

Hashes for adc_aiopg-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4f00af37c40b52aeef71bfc9dbdb5042a02ddbe9ec8adfeb6d7da44e2c475176
MD5 982ab05fe0887de2d41f3ab45dc4d7fb
BLAKE2b-256 f2aa9b5e9fc4ed9626bbd74d58f0201006e25e39298831a6b58b8f7bdab626ec

See more details on using hashes here.

Release history Release notifications | RSS feed

1.2.0

2 files

1.1.1

2 files

1.1.0

2 files

1.0.0

2 files

This release

0.3.0 This release

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page