0Pricing
Python Academy · Aula

Endpoints assíncronos e integração com banco de dados

Escreva manipuladores de rotas assíncronos e conecte-se a um banco de dados com SQLAlchemy.

Endpoints assíncronos e integração com banco de dados é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.

Endpoints com async def

Declare os manipuladores de rotas com async def para I/O não bloqueante. Use def para operações limitadas pela CPU ou bloqueantes (o FastAPI as executa em um conjunto de linhas de execução).

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 é um controlador PostgreSQL assíncrono e rápido. Use um conjunto de conexões compartilhado entre as requisições.

# 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 assíncrono

SQLAlchemy 1.4+ com async_sessionmaker fornece um ORM assíncrono. Use AsyncSession como uma dependência do 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

Dependência do banco de dados

Retorne a sessão a partir de uma dependência do FastAPI para que ela seja confirmada e fechada após a requisição.

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 do SQLAlchemy

Defina modelos ORM com DeclarativeBase e mapeie-os para tabelas do banco de dados.

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]

Operações CRUD

Implemente as operações básicas de criação, leitura, atualização e exclusão usando os métodos da sessão assíncrona do 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 migrações

Use o Alembic para gerenciar migrações do esquema do banco de dados de forma controlada por versões.

# 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 chamadas HTTP assíncronas

Use httpx.AsyncClient para chamar APIs externas a partir de endpoints assíncronos do 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()

Tarefas em segundo plano

Use BackgroundTasks para executar trabalho depois que a resposta for enviada — por exemplo, enviar um e-mail ou atualizar uma memória cache.

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 do ciclo de vida

Use o gerenciador de contexto lifespan (FastAPI 0.93+) para executar código de inicialização e desligamento — por exemplo, criar o conjunto de conexões do banco de dados.

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)

Testando o FastAPI com httpx

Use httpx.AsyncClient com ASGITransport para testar endpoints do FastAPI sem executar um 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}

Verificação rápida

Quando se deve usar async def em vez de def para um manipulador de rota do FastAPI?

Revisão

Use endpoints com async def e controladores de banco de dados assíncronos (asyncpg, SQLAlchemy assíncrono). Gerencie a sessão do banco de dados como uma dependência do FastAPI. Use BackgroundTasks para trabalho após o envio da resposta e o gerenciador de contexto lifespan para a inicialização e o desligamento.

Perguntas Frequentes

A aula “Endpoints assíncronos e integração com banco de dados” é grátis?

Sim — o texto completo de “Endpoints assíncronos e integração com banco de dados” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.

O que vou aprender em “Endpoints assíncronos e integração com banco de dados”?

Escreva manipuladores de rotas assíncronos e conecte-se a um banco de dados com SQLAlchemy. Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Python Academy?

Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Endpoints assíncronos e integração com banco de dados”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Python Academy?

Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Configuração de projeto FastAPI e primeiro endpoint
  2. Parâmetros de caminho, parâmetros de consulta e corpos de requisição
  3. Injeção de dependências e autenticação
  4. Endpoints assíncronos e integração com banco de dados
← Voltar para Python Academy