Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

463
Vistas
Parámetros POST de tipo de campo Pydantic no válidos (FastApi) - Python 3.8

Estoy intentando usar FastApi + SqlAlchemy y tengo un problema con los parámetros. Este es el error que está causando mi parámetro Post. ¿Qué estoy haciendo mal?

MENSAJE DE ERROR

 fastapi.exceptions.FastAPIError: Invalid args for response field! Hint: check that <class 'app.models.Post'> is a valid pydantic field type

Código

 from fastapi import FastAPI, Response, HTTPException from fastapi.params import Body, Depends from sqlalchemy.orm import Session from starlette import status from . import models from .database import engine, get_db from .models import Post models.Base.metadata.create_all(bind=engine) app = FastAPI() @app.get("/posts") def get_posts(db: Session = Depends(get_db)): posts = db.query(models.Post).all() return {"data": posts} @app.post("/posts", status_code = status.HTTP_201_CREATED) def create_posts(post: Post, db: Session = Depends(get_db)): new_post = models.Post(title=post.title, content=post.content, published=post.published) # db.add(new_post) # db.commit() # db.refresh(new_post) return {"data": new_post}

Tipo de mensaje

 from sqlalchemy import Column, Integer, String, Boolean, ForeignKey from sqlalchemy.orm import relationship from sqlalchemy.sql.expression import text from sqlalchemy.sql.sqltypes import TIMESTAMP from .database import Base class Post(Base): __tablename__ = "postsalchemy" id = Column(Integer, primary_key=True, nullable=False) title = Column(String, nullable=False) content = Column(String, nullable=False) published = Column(Boolean, server_default='TRUE', nullable=False) created_at = Column(TIMESTAMP(timezone=True), nullable=False, server_default=text('now()'))
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

FastAPI usa la biblioteca Pydantic para validar tanto la solicitud HTTP como el cuerpo de la respuesta HTTP. (Por cierto Pydantic es una biblioteca que le proporcionará la validación de la estructura de datos contra un esquema dado) Para ese propósito, debe crear una clase Pydantic Model que corresponda a su clase Post de sqlalchemy.

Lea los documentos aquí para obtener más información sobre el modelo de respuesta.

FYI, aquí está cómo hacerlo con su ejemplo:

 from fastapi import FastAPI, Response, HTTPException from fastapi.params import Body, Depends from sqlalchemy.orm import Session from starlette import status from . import models from .database import engine, get_db from .models import Post from pydantic import BaseModel from datetime import datetime from typing import Dict, List # Define your pydantic response model class PostResponse(BaseModel): id: int title: str content: str published: bool created_at: datetime models.Base.metadata.create_all(bind=engine) app = FastAPI() # Set PostResponse as a response model in the route decorator @app.get("/posts", response_model=Dict[str, List[PostResponse]]) def get_posts(db: Session = Depends(get_db)): posts = db.query(models.Post).all() return {"data": posts} @app.post("/posts", status_code = status.HTTP_201_CREATED, response_model=Dict[str, PostResponse]) def create_posts(post: Post, db: Session = Depends(get_db)): new_post = models.Post(title=post.title, content=post.content, published=post.published) # db.add(new_post) # db.commit() # db.refresh(new_post) return {"data": new_post}

EXTRA: También podría estar interesado en la biblioteca SQLModel que es del mismo autor de FastAPI y es una combinación entre SQL Alchemy y la biblioteca Pydantic y básicamente le permite evitar la duplicación (y declarar su modelo solo una vez)

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda