因此,我正在构建一个fastAPI应用程序,我希望我的响应模型从数据库中获取数据(共6列),并在API中的响应描述中返回数据
@router.post("/run/new", response_model=schemas.xyzRun)
def new_request(*,
db: Session = Depends(get_db),
request: schemas.Request):
id = service.initiate_new(db, request)
return db.query(models.xyzRun).filter(models.xyzRun.xyzRunid == id).all()
我只是从service.initiate_new
获取id的值,然后从db返回具有该id的行。
当我放置response_model=List[schemas.xyzRun]
时,它可以工作,但是上面的代码(没有列表)抛出了一个错误:
pydantic.error\u wrappers.ValidationError:EtlRun的5个验证错误
我迷路了,有人能解释一下吗
其他信息:
models.xyzRun是一个类xyzRun,其中我给出了__tablename__
、__table_args__
和xyzRunid = Column ('xyzRunid, Integer )
以及其他5个变量
schemas.xyzRun是一个类xyzRun,其中我给出了xyzRunid=int
和5个其他变量
这很简单,您的数据库会找到多个结果,并且它位于一个列表中,让我们假设您有这样一个模型
您有一个包含两列的数据库
当您向数据库发送请求时,如果发现多个结果
响应如下所示:
Pydantic试图验证这一点,但它找到了一个
List
而不是一个Dict
进行验证,但当您告诉它是一个列表时,它会检查该列表中的每个项目。这就是它成功返回带有List
的响应的原因出现错误是因为使用filter().all()返回一个列表而不是Dict,即它返回一组记录而不是一条记录
要获取单个记录,应使用
如果您总是希望有一条记录,那么也可以使用.one()而不是.first()
请查看https://docs.sqlalchemy.org/en/13/orm/tutorial.html#returning-lists-and-scalars了解更多参考资料
相关问题 更多 >
编程相关推荐