Introducción
Con el auge de frameworks web asíncronos como FastAPI y Starlette, crece la necesidad de formas rápidas y no bloqueantes de interactuar con la base de datos. asyncpg es un cliente asíncrono para PostgreSQL, diseñado desde cero para ofrecer el máximo rendimiento.
asyncpg es una forma de bajo nivel, rápida y eficiente de trabajar con PostgreSQL usando el estilo async/await, lo que lo convierte en una excelente opción para aplicaciones Python modernas. La librería está escrita en Python y Cython, lo que garantiza una alta velocidad de ejecución y una sobrecarga mínima.
¿Qué es asyncpg?
asyncpg es un driver PostgreSQL asíncrono completo para Python que permite la interacción directa con la base de datos sin necesidad de un ORM. La librería soporta todas las funcionalidades modernas de PostgreSQL, incluyendo JSON, UUID, arrays, tipos de datos personalizados y funciones avanzadas.
Principales ventajas de asyncpg:
- Asincronía total con soporte para asyncio
- Alto rendimiento gracias al uso de Cython
- Soporte nativo para todos los tipos de datos de PostgreSQL
- Pool de conexiones integrado
- Protección contra inyección SQL
- Integración sencilla con frameworks asíncronos
Instalación y configuración inicial
Requisitos del sistema
Para trabajar con asyncpg necesitas:
- Python 3.7 o superior
- PostgreSQL 9.5 o superior
- Sistema operativo: Linux, macOS, Windows
Instalación de la librería
pip install asyncpg
Para desarrollo, se recomienda instalar paquetes adicionales:
pip install asyncpg pytest-asyncio
Conexión básica a la base de datos
import asyncpg
import asyncio
async def main():
# Conexión con parámetros
conn = await asyncpg.connect(
user='postgres',
password='secret',
database='test_db',
host='127.0.0.1',
port=5432
)
# Verificar conexión
version = await conn.fetchval('SELECT version()')
print(f"Conectado a: {version}")
await conn.close()
asyncio.run(main())
Conexión mediante DSN
# Usando cadena de conexión
dsn = "postgresql://postgres:secret@127.0.0.1:5432/test_db"
conn = await asyncpg.connect(dsn)
Asincronía en Python y el rol de asyncpg
asyncpg utiliza async/await y es totalmente compatible con asyncio, lo que permite ejecutar consultas no bloqueantes a PostgreSQL. Esto es fundamental para aplicaciones y APIs de alta concurrencia, donde bloquear el event loop puede reducir drásticamente el rendimiento.
Diferencia con drivers síncronos
A diferencia de psycopg2, que es síncrono, asyncpg no bloquea la ejecución de otras tareas:
# Enfoque síncrono (psycopg2)
import psycopg2
conn = psycopg2.connect(...) # Bloquea el hilo
cursor = conn.cursor()
cursor.execute("SELECT * FROM users") # Bloquea el hilo
# Enfoque asíncrono (asyncpg)
import asyncpg
conn = await asyncpg.connect(...) # No bloquea el event loop
rows = await conn.fetch("SELECT * FROM users") # No bloquea el event loop
Ejecución concurrente de consultas
async def consultas_concurrentes():
conn = await asyncpg.connect(...)
# Ejecutar varias consultas en paralelo
tareas = [
conn.fetch("SELECT * FROM users"),
conn.fetch("SELECT * FROM orders"),
conn.fetch("SELECT * FROM products")
]
resultados = await asyncio.gather(*tareas)
return resultados
Métodos y funciones principales de asyncpg
Tabla de métodos princip
También en la biblioteca
Generación de informes PDF en PHP: revisión de bibliotecas y ejemplos de código
Envío de SMS en Go (Golang): Biblioteca API
Análisis de HTML en C# (.NET): bibliotecas HtmlAgilityPack y AngleSharp
GraphQL para Swift: Apollo iOS — cliente para iOS y macOS