asyncpg: Cliente PostgreSQL Assíncrono para Python

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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

Recommendations