Introdução
Com o crescimento de frameworks web assíncronos como FastAPI e Starlette, aumenta a necessidade de formas rápidas e não bloqueantes de interagir com o banco de dados. O asyncpg é um cliente assíncrono para PostgreSQL, construído do zero para máxima performance.
O asyncpg oferece uma maneira de baixo nível, rápida e eficiente de trabalhar com PostgreSQL no estilo async/await, tornando-o uma excelente escolha para aplicações Python modernas. A biblioteca é escrita em Python e Cython, garantindo alta velocidade de execução e sobrecarga mínima.
O que é asyncpg
O asyncpg é um driver PostgreSQL assíncrono completo para Python, que permite interação direta com o banco de dados sem usar um ORM. A biblioteca suporta todos os recursos modernos do PostgreSQL, incluindo JSON, UUID, arrays, tipos de dados personalizados e funções avançadas.
Principais vantagens do asyncpg:
- Assincronicidade total com suporte a asyncio
- Alta performance graças ao uso de Cython
- Suporte nativo a todos os tipos de dados do PostgreSQL
- Suporte integrado a pool de conexões
- Segurança contra injeção de SQL
- Integração simples com frameworks assíncronos
Instalação e configuração inicial
Requisitos do sistema
Para usar o asyncpg, você precisa de:
- Python 3.7 ou superior
- PostgreSQL 9.5 ou superior
- Sistema operacional: Linux, macOS, Windows
Instalação da biblioteca
pip install asyncpg
Para desenvolvimento, é recomendado instalar pacotes adicionais:
pip install asyncpg pytest-asyncio
Conexão básica com o banco de dados
import asyncpg
import asyncio
async def main():
# Conexão com parâmetros
conn = await asyncpg.connect(
user='postgres',
password='secret',
database='test_db',
host='127.0.0.1',
port=5432
)
# Verificando a conexão
version = await conn.fetchval('SELECT version()')
print(f"Conectado a: {version}")
await conn.close()
asyncio.run(main())
Conexão via DSN
# Usando string de conexão
dsn = "postgresql://postgres:secret@127.0.0.1:5432/test_db"
conn = await asyncpg.connect(dsn)
Assincronicidade em Python e o papel do asyncpg
O asyncpg usa async/await e é totalmente compatível com asyncio, permitindo consultas não bloqueantes ao PostgreSQL. Isso é essencial para aplicações e APIs de alta carga, onde bloquear o event loop pode reduzir drasticamente a performance.
Diferença dos drivers síncronos
Ao contrário do psycopg2, que é síncrono, o asyncpg não bloqueia a execução de outras tarefas:
# Abordagem síncrona (psycopg2)
import psycopg2
conn = psycopg2.connect(...) # Bloqueia a thread
cursor = conn.cursor()
cursor.execute("SELECT * FROM users") # Bloqueia a thread
# Abordagem assíncrona (asyncpg)
import asyncpg
conn = await asyncpg.connect(...) # Não bloqueia o event loop
rows = await conn.fetch("SELECT * FROM users") # Não bloqueia o event loop
Execução concorrente de consultas
async def concurrent_queries():
conn = await asyncpg.connect(...)
# Executando várias consultas em paralelo
tasks = [
conn.fetch("SELECT * FROM users"),
conn.fetch("SELECT * FROM orders"),
conn.fetch("SELECT * FROM products")
]
results = await asyncio.gather(*tasks)
return results
Principais métodos e funções do asyncpg
Tabela dos principais métodos
Também na biblioteca
ORM para C++: comparação e exemplos de uso de bibliotecas
Configuração de aplicações Rust: bibliotecas config, envy e dotenvy
UUID em JavaScript (Node.js): guia completo com exemplos práticos
Carthage para Swift: guia completo com exemplos práticos
Monitoramento de aplicações PHP com as bibliotecas php-ast e xhprof