Ответ
asyncpg — это высокопроизводительная библиотека для асинхронной работы с базой данных PostgreSQL в Python, созданная для использования с asyncio.
Ключевое преимущество: в отличие от традиционных драйверов (например, psycopg2), asyncpg не блокирует основной поток выполнения (event loop) во время операций с базой данных. Это критически важно для производительности асинхронных веб-серверов и приложений, так как позволяет обрабатывать другие задачи во время ожидания ответа от БД.
Основные особенности:
- Скорость: Одна из самых быстрых библиотек для работы с PostgreSQL благодаря прямой реализации протокола.
- Надежность: Поддержка подготовленных выражений (prepared statements), транзакций и пулов соединений.
- Современный API: Полностью построен на
async/awaitсинтаксисе.
Пример использования:
import asyncio
import asyncpg
async def get_user(user_id: int):
# Установка соединения с БД
conn = await asyncpg.connect(user='postgres', database='test_db')
try:
# Выполнение запроса с безопасной подстановкой параметра ($1)
row = await conn.fetchrow(
'SELECT * FROM users WHERE id = $1', user_id
)
if row:
print(dict(row))
finally:
# Гарантированное закрытие соединения
await conn.close()
asyncio.run(get_user(1))
Основное ограничение: asyncpg работает исключительно с PostgreSQL.
Ответ 18+ 🔞
А, ну это же тот самый asyncpg, про который все так пиздят про скорость! Библиотека, которая для асинхронной работы с PostgreSQL в Питоне, чисто под asyncio заточена.
Вот в чём, блядь, главный прикол: в отличие от старых драйверов, вроде psycopg2, эта штука не блокирует твой основной поток, пока база данных там себе думает. То есть пока один запрос болтается в сети, твоё приложение может других клиентов обслуживать, а не тупо ждать, как мудак. Для асинхронных веб-серверов — это просто пиздец как важно, ёпта.
Что она умеет, эта мартышлюшка:
- Скорость: Одна из самых быстрых, потому что протокол PostgreSQL нативно реализовали, без всяких прослоек.
- Надёжность: Подготовленные выражения, транзакции, пулы соединений — всё на месте, блядь.
- API современный: Полностью на
async/await, как и положено в наше время.
Вот, смотри, как это выглядит в коде:
import asyncio
import asyncpg
async def get_user(user_id: int):
# Подключаемся к базе
conn = await asyncpg.connect(user='postgres', database='test_db')
try:
# Делаем запрос, параметры безопасно подставляются через $1, $2...
row = await conn.fetchrow(
'SELECT * FROM users WHERE id = $1', user_id
)
if row:
print(dict(row))
finally:
# Закрываем соединение, чтоб не болталось
await conn.close()
asyncio.run(get_user(1))
Но есть один нюанс, ёпта: asyncpg работает только с PostgreSQL. Хочешь с чем-то другим — иди нахуй, ищи другую библиотеку. Вот такая вот хитрая жопа.