Endpoints CRUD en FastAPI con Pydantic v2, Alembic y tests con pytest
Genera un módulo FastAPI completo para un recurso: esquemas Pydantic v2, modelo y migración Alembic, router CRUD paginado y tests con pytest y httpx. Pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Incluye 5 variables personalizables y se copia gratis en un clic.
Intermedio · Código · Pendiente de revisión editorial
Prompt
Actúa como desarrollador backend senior especializado en Python, FastAPI y SQLAlchemy.
Quiero añadir a una API FastAPI existente un módulo completo para gestionar {{recurso}}.
- Campos y tipos: {{campos}}
- Reglas de negocio: {{reglas}}
- Base de datos: {{base_datos}}
- Acceso a datos: {{acceso}}
Entregables, en este orden:
1. Estructura de archivos (router, esquemas, modelo, servicio o repositorio, tests) y una frase que justifique la separación.
2. Esquemas Pydantic v2 separados para crear, actualizar parcialmente y responder, con validaciones (`Field`, `field_validator`, `model_validator`) que apliquen las reglas de negocio.
3. Modelo de base de datos y la migración Alembic correspondiente, con índices y restricciones de unicidad donde tengan sentido.
4. Router con listado paginado y filtrable, detalle, creación, actualización parcial (PATCH) y borrado. Usa los códigos correctos (201, 204, 404, 409, 422) y `response_model` en todos los endpoints.
5. Sesión de base de datos inyectada con `Depends`, sin estado global, y transacciones bien delimitadas.
6. Tests con pytest y `httpx.AsyncClient` (o `TestClient` si el acceso es síncrono): caso feliz, validación, recurso inexistente y conflicto con las reglas de negocio, sobre una base de datos de test aislada.
7. Comandos para arrancar la app, aplicar la migración y ejecutar los tests.
Restricciones:
- Python 3.11 o superior, todo tipado, sin dependencias innecesarias.
- No inventes campos ni reglas: si algo es ambiguo, pregúntame antes de escribir código o márcalo como [COMPLETAR].
- Indica qué decisiones dependen de cómo está montado el resto de mi proyecto (autenticación, configuración, nombres de tablas).
Formato: un bloque de código por archivo con su ruta como título y, al final, una lista de supuestos.Cómo usarlo
- Describe el recurso con sus campos reales y las reglas que hoy aplicas a mano.
- Elige tu base de datos y si usas SQLAlchemy asíncrono, síncrono o SQLModel.
- Copia los archivos, genera la migración y ejecuta
pytestantes de integrarlo. - Si tu proyecto ya tiene convenciones de carpetas, pégalas para que el código las respete.
Ejemplo de uso
Recurso: reservas de mesa · Campos: cliente, fecha y hora, comensales · Regla: máximo 40 comensales por franja · PostgreSQL con SQLAlchemy asíncrono.
Resultado de ejemplo
2. Esquemas Pydantic v2 — app/reservas/schemas.py
from datetime import datetime, timedelta, timezone
from enum import Enum
from pydantic import BaseModel, Field, field_validator
class EstadoReserva(str, Enum):
pendiente = "pendiente"
confirmada = "confirmada"
cancelada = "cancelada"
class ReservaCreate(BaseModel):
nombre_cliente: str = Field(min_length=1, max_length=120)
telefono: str = Field(pattern=r"^\+?[0-9 ]{7,20}$")
fecha_hora: datetime
comensales: int = Field(ge=1, le=12)
@field_validator("fecha_hora")
@classmethod
def dentro_de_ventana(cls, v: datetime) -> datetime:
if v.tzinfo is None:
raise ValueError("la fecha debe incluir zona horaria")
ahora = datetime.now(timezone.utc)
if v < ahora or v > ahora + timedelta(days=60):
raise ValueError("solo se admiten reservas entre hoy y 60 días")
return v
class ReservaUpdate(BaseModel):
fecha_hora: datetime | None = None
comensales: int | None = Field(default=None, ge=1, le=12)
estado: EstadoReserva | None = None
El límite de 40 comensales por franja de 30 minutos necesita consultar la base de datos, así que no va en el esquema: el servicio suma los comensales de la franja dentro de la misma transacción y responde 409 si se supera.
Supuestos
- Las franjas empiezan en :00 y :30 → [COMPLETAR] si tu restaurante usa otro criterio.
- El formato del teléfono es orientativo…
Datos clave
- Categoría
- Programación y desarrollo · Python
- Tipo de resultado
- Código
- Nivel
- Intermedio
- Pensado para
- ChatGPT, Claude, Gemini y Microsoft Copilot
- Verificado en
- Pendiente de verificación editorial
- Variables
- Recurso, Campos y tipos, Reglas de negocio, Base de datos y Acceso a datos
- Idioma
- Español
- Precio
- Gratis, sin registro
- Actualizado
- 07/11/2026
Preguntas frecuentes
¿Por qué tres esquemas Pydantic distintos para el mismo recurso?
Porque crear, actualizar y responder exigen campos diferentes: en PATCH todo es opcional y la respuesta incluye id y fechas. Separarlos evita exponer campos internos y validaciones incoherentes.
¿Dónde deben ir las reglas de negocio, en el esquema o en el servicio?
Las validaciones de formato y rango van en Pydantic. Las que necesitan consultar la base de datos, como el aforo de una franja, van en el servicio y devuelven 409 si hay conflicto.
¿Sirve para FastAPI con SQLModel?
Sí. Elige SQLModel en la variable de acceso a datos y el prompt adaptará modelos y esquemas, aunque seguirá separando entrada y salida.
¿Para qué sirve este prompt?
Genera un módulo FastAPI completo para un recurso: esquemas Pydantic v2, modelo y migración Alembic, router CRUD paginado y tests con pytest y httpx.
¿Con qué herramientas de IA funciona?
Está pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Todavía no lo hemos verificado en estas herramientas, por lo que los resultados pueden variar entre ellas.
¿Cómo personalizo el prompt?
Pulsa «Personalizar» y rellena las variables (Recurso, Campos y tipos, Reglas de negocio, Base de datos y Acceso a datos). El texto se actualiza al instante y después puedes copiarlo con un clic. Los valores se guardan solo en tu navegador.
¿Necesito experiencia para usarlo?
Es de nivel intermedio: conviene que conozcas el tema para aportar buen contexto y revisar el resultado con criterio.
¿Este prompt es gratis?
Sí. Todos los prompts de HomeCasa Prompts son gratuitos, sin registro ni suscripción. Puedes usarlos también en proyectos profesionales.
¿Puedo fiarme del resultado de la IA?
Úsalo como un borrador de calidad: revisa siempre datos, cifras y afirmaciones importantes antes de publicarlos o tomar decisiones.