GitHub: https://github.com/MagicStack/asyncpg
Stars: ~6.8k
Статус: Активно развивается
- Самая быстрая библиотека для PostgreSQL в Python
- Написана на Cython, нативный протокол PostgreSQL
- Async-first, connection pool из коробки
- Автоматические prepared statements
- Типизация PostgreSQL типов
✅ Максимальная производительность (в 3-5 раз быстрее psycopg2)
✅ Настоящий async/await
✅ Connection pool встроен
✅ Отличная документация
✅ Активное сообщество
✅ Идеально для FastAPI/Starlette
❌ Только PostgreSQL (не универсальная)
❌ Синтаксис $1, $2 вместо привычного %s
❌ Нет поддержки psycopg2 extensions
- ~50,000-100,000 queries/sec (простые SELECT)
- ~10,000-30,000 inserts/sec
import asyncpg
pool = await asyncpg.create_pool(dsn='postgresql://...')
row = await pool.fetchrow('select * from users where id = $1', 1)🏆 ЛУЧШИЙ ВЫБОР для FastAPI + PostgreSQL
GitHub: https://github.com/psycopg/psycopg
Stars: ~1.6k
Статус: Активно развивается (новое поколение)
- Современная замена psycopg2
- Поддержка sync И async
- Connection pool (pgpool)
- Лучшая типизация
- Prepared statements
✅ Sync и async в одной библиотеке
✅ Знакомый API (похож на psycopg2)
✅ Современный код (type hints)
✅ Активное развитие
✅ Connection pool (pgpool)
✅ Привычный синтаксис %s
❌ Async медленнее asyncpg (написан на чистом Python)
❌ Меньше adoption в сообществе (пока)
❌ Некоторые фичи ещё в разработке
- Sync: ~как psycopg2
- Async: медленнее asyncpg на 30-50%
import psycopg
from psycopg_pool import AsyncConnectionPool
pool = AsyncConnectionPool('postgresql://...')
async with pool.connection() as conn:
async with conn.cursor() as cur:
await cur.execute('select * from users where id = %s', (1,))
row = await cur.fetchone()💡 Хороший выбор, если нужна гибкость sync/async
GitHub: https://github.com/encode/databases
Stars: ~3.8k
Статус: Maintenance mode (не добавляют новые фичи)
- Универсальная async абстракция
- Поддержка PostgreSQL, MySQL, SQLite
- Под капотом использует asyncpg/aiomysql/aiosqlite
- Core queries (как в SQLAlchemy Core)
✅ Простой и чистый API
✅ Поддержка разных БД (универсальность)
✅ Query builder встроен
✅ Хорошая интеграция с FastAPI
✅ Использует asyncpg под капотом (для Postgres)
❌ Maintenance mode (мало апдейтов)
❌ Дополнительный слой абстракции (overhead)
❌ Привязка к SQLAlchemy Core для query builder
❌ Менее гибкий чем чистый asyncpg
- Близка к asyncpg (небольшой overhead на абстракцию)
from databases import Database
database = Database('postgresql://...')
await database.connect()
query = "select * from users where id = :id"
row = await database.fetch_one(query=query, values={"id": 1})GitHub: https://github.com/aio-libs/aiopg
Stars: ~1.4k
Статус: Поддерживается, но медленное развитие
- Async wrapper вокруг psycopg2
- Connection pool
- Поддержка SA Core (опционально)
✅ Знакомый API psycopg2
✅ Connection pool
✅ Поддержка всех фич psycopg2
❌ Медленнее asyncpg (wrapper вокруг синхронного кода)
❌ Устаревает (лучше psycopg3)
❌ Меньше оптимизаций
- Медленнее asyncpg в ~2 раза
🚫 Не рекомендуется для новых проектов. Используйте asyncpg или psycopg3
Классика, уже рассмотрели
✅ Проверено временем
✅ Огромное сообщество
✅ Все знают как использовать
❌ Только sync
❌ Блокирует event loop в async приложениях
❌ Нет встроенного pool (нужен pgbouncer или свой)
from sqlalchemy import create_engine, text
engine = create_engine('postgresql://...')
with engine.connect() as conn:
result = conn.execute(text('select * from users where id = :id'), {'id': 1})
row = result.fetchone()Плюсы:
- Query builder
- Миграции через Alembic
- Можно без ORM (Core only)
Минусы:
- Тяжеловесная библиотека
- Сложнее чистого SQL
❌ Это ORM - не подходит по требованию
| Библиотека | Async | Скорость | Популярность | Sync/Async | Рекомендация |
|---|---|---|---|---|---|
| asyncpg | ✅ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | Async only | 🏆 Лучший |
| psycopg3 | ✅ | ⭐⭐⭐⭐ | ⭐⭐⭐ | Оба | 💡 Перспективный |
| databases | ✅ | ⭐⭐⭐⭐ | ⭐⭐⭐ | Async only | |
| aiopg | ✅ | ⭐⭐⭐ | ⭐⭐ | Async only | 🚫 Устарел |
| psycopg2 | ❌ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | Sync only |
1. asyncpg (если только PostgreSQL)
2. psycopg3 (если нужна гибкость sync/async)
3. databases (если нужна поддержка разных БД, но осторожно - maintenance)
1. psycopg2 (проверено временем)
2. psycopg3 sync (современная альтернатива)
1. asyncpg (максимальная производительность)
Рекомендую остаться на asyncpg, потому что:
- ✅ Это FastAPI проект → нужен настоящий async
- ✅ PostgreSQL → asyncpg оптимизирован именно под него
- ✅ Максимальная производительность
- ✅ Огромное комьюнити в FastAPI экосистеме
- ✅ Стабильная и проверенная библиотека
Альтернатива: psycopg3 - если нужна гибкость, но производительность немного ниже.
НЕ рекомендую:
- ❌ databases - в maintenance mode
- ❌ aiopg - устарел
- ❌ psycopg2 - блокирующий, плохо для async