0Pricing
Python Academy · Lección

Endpoints asíncronos e integración con bases de datos

Escriba controladores de rutas asíncronos y conéctese a una base de datos con SQLAlchemy.

Endpoints asíncronos e integración con bases de datos es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.

Endpoints con async def

Declare los controladores de rutas con async def para realizar operaciones de E/S sin bloqueo. Use def para operaciones limitadas por la CPU o bloqueantes (FastAPI las ejecuta en un grupo de hilos).

from fastapi import FastAPI
import asyncio
app = FastAPI()

@app.get("/slow")
async def slow():
    await asyncio.sleep(1)   # non-blocking
    return {"done": True}

asyncpg para PostgreSQL

asyncpg es un controlador asíncrono y rápido para PostgreSQL. Use un grupo de conexiones compartido entre las solicitudes.

# pip install asyncpg
import asyncpg, asyncio

async def main():
    pool = await asyncpg.create_pool("postgresql://user:pass@host/db")
    async with pool.acquire() as conn:
        rows = await conn.fetch("SELECT id, name FROM users")
    await pool.close()
    return rows

SQLAlchemy asíncrono

SQLAlchemy 1.4+ con async_sessionmaker proporciona un ORM asíncrono. Use AsyncSession como dependencia de FastAPI.

# pip install sqlalchemy aiosqlite
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker

engine = create_async_engine("sqlite+aiosqlite:///db.sqlite")
AsyncSessionLocal = async_sessionmaker(engine, expire_on_commit=False)

async def get_db():
    async with AsyncSessionLocal() as session:
        yield session

Dependencia de base de datos

Devuelva la sesión con yield desde una dependencia de FastAPI para que se confirme y se cierre después de la solicitud.

from fastapi import Depends, FastAPI
from sqlalchemy.ext.asyncio import AsyncSession
app = FastAPI()

async def get_db():
    async with AsyncSessionLocal() as session:
        yield session

@app.get("/users")
async def get_users(db: AsyncSession = Depends(get_db)):
    result = await db.execute(select(User))
    return result.scalars().all()

Modelos ORM de SQLAlchemy

Defina modelos ORM con DeclarativeBase y asígnelos a tablas de la base de datos.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column

class Base(DeclarativeBase): pass

class User(Base):
    __tablename__ = "users"

    id:    Mapped[int] = mapped_column(primary_key=True)
    name:  Mapped[str]
    email: Mapped[str]

Operaciones CRUD

Implemente las operaciones básicas de crear, leer, actualizar y eliminar mediante los métodos de sesión asíncrona de SQLAlchemy.

from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession

async def create_user(db: AsyncSession, name: str, email: str):
    user = User(name=name, email=email)
    db.add(user)
    await db.commit()
    await db.refresh(user)
    return user

async def get_user(db: AsyncSession, user_id: int):
    result = await db.execute(select(User).where(User.id == user_id))
    return result.scalar_one_or_none()

Alembic para migraciones

Use Alembic para gestionar las migraciones del esquema de la base de datos de forma controlada mediante versiones.

# pip install alembic
# alembic init alembic
# Edit alembic/env.py to point to your models

# Generate a migration:
# alembic revision --autogenerate -m "add users table"

# Apply:
# alembic upgrade head

httpx para llamadas HTTP asíncronas

Use httpx.AsyncClient para llamar a API externas desde endpoints asíncronos de FastAPI.

# pip install httpx
import httpx
from fastapi import FastAPI
app = FastAPI()

@app.get("/weather")
async def weather(city: str):
    async with httpx.AsyncClient() as client:
        r = await client.get(f"https://wttr.in/{city}?format=j1")
        return r.json()

Tareas en segundo plano

Use BackgroundTasks para ejecutar tareas después de enviar la respuesta; por ejemplo, enviar un correo electrónico o actualizar una caché.

from fastapi import FastAPI, BackgroundTasks
app = FastAPI()

def send_welcome_email(email: str):
    # blocking I/O — runs in background thread
    smtp_send(email, "Welcome!")

@app.post("/register")
def register(email: str, bg: BackgroundTasks):
    create_user(email)
    bg.add_task(send_welcome_email, email)
    return {"status": "registered"}

Eventos del ciclo de vida

Use el gestor de contexto lifespan (FastAPI 0.93+) para ejecutar código de inicio y apagado; por ejemplo, crear el grupo de conexiones de la base de datos.

from contextlib import asynccontextmanager
from fastapi import FastAPI

@asynccontextmanager
async def lifespan(app: FastAPI):
    app.state.pool = await asyncpg.create_pool(DSN)
    yield
    await app.state.pool.close()

app = FastAPI(lifespan=lifespan)

Probar FastAPI con httpx

Use httpx.AsyncClient con ASGITransport para probar endpoints de FastAPI sin ejecutar un servidor.

import pytest, httpx
from fastapi import FastAPI
app = FastAPI()

@app.get("/ping")
async def ping(): return {"pong": True}

@pytest.mark.asyncio
async def test_ping():
    async with httpx.AsyncClient(
        transport=httpx.ASGITransport(app=app),
        base_url="http://test"
    ) as client:
        r = await client.get("/ping")
    assert r.json() == {"pong": True}

Comprobación rápida

¿Cuándo debe usar async def en lugar de def para el controlador de una ruta de FastAPI?

Repaso

Use endpoints con async def y controladores de bases de datos asíncronos (asyncpg, SQLAlchemy async). Gestione la sesión de la base de datos como una dependencia de FastAPI. Use BackgroundTasks para las tareas posteriores a la respuesta y el gestor de contexto lifespan para el inicio y el apagado.

Preguntas frecuentes

¿La lección «Endpoints asíncronos e integración con bases de datos» es gratis?

Sí — el texto completo de «Endpoints asíncronos e integración con bases de datos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Endpoints asíncronos e integración con bases de datos»?

Escriba controladores de rutas asíncronos y conéctese a una base de datos con SQLAlchemy. Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Python Academy?

No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Endpoints asíncronos e integración con bases de datos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Python Academy?

Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Configuración de un proyecto FastAPI y primer endpoint
  2. Parámetros de ruta, parámetros de consulta y cuerpos de solicitud
  3. Inyección de dependencias y autenticación
  4. Endpoints asíncronos e integración con bases de datos
← Volver a Python Academy