首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FastAPI -从数据库中返回单个元素

FastAPI -从数据库中返回单个元素
EN

Stack Overflow用户
提问于 2021-10-10 12:22:22
回答 1查看 91关注 0票数 0

我有两个api端点。这个函数返回我所有用户的列表。

代码语言:javascript
复制
@app.get("/entity/", response_model=List[schemas.Userentity])
def read_entities(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
    users = crud.get_entities(db, skip=skip, limit=limit)
    return users

def get_entities(db: Session, skip: int = 0, limit: int = 100):
    return db.query(models.Userentity).offset(skip).limit(limit).all()

这可以很好地工作。查看数据:

代码语言:javascript
复制
[
{
"id": "89f8a844-a30e-41b2-947d-6eb0fcadb1bf",
"email": "xxx@hotmail.com",
"first_name": "xxx",
"last_name": "xxx",
"username": "schoedeld",
"created_timestamp": "1633711745164"
},
{
"id": "abd6bb6b-ad80-431c-9f64-d9e651638f4c",
"email": "xxxsd@hotmail.com",
"first_name": "xxx",
"last_name": "xxx",
"username": "xxx",
"created_timestamp": "1633711733338"
},
{
"id": "ad0bd5ca-5aed-4d7f-a6ac-2620f2133685",
"email": "xxxx@hotmail.com",
"first_name": "fsdfs",
"last_name": "fsdfs",
"username": "testadmin",
"created_timestamp": "1633710812666"
}
]

在这里,我有一个端点来返回单个用户:

我可以返回一个只有一个元素的列表,但是我想返回一个值,所以我将我的端点更新为:

代码语言:javascript
复制
@app.get("/entity/{id}", response_model=schemas.Userentity)
def read_entity(id: str, db: Session = Depends(get_db)):
    user = crud.get_entity(db, id=id)
    return user

def get_entity(db: Session, id: str):
    return db.query(models.Userentity).filter_by(id=id)

这将导致以下错误:

代码语言:javascript
复制
pydantic.error_wrappers.ValidationError: 6 validation errors for Userentity
response -> id
  field required (type=value_error.missing)
response -> email
  field required (type=value_error.missing)
response -> first_name
  field required (type=value_error.missing)
response -> last_name
  field required (type=value_error.missing)
response -> username
  field required (type=value_error.missing)
response -> created_timestamp
  field required (type=value_error.missing)

我是FastAPI的新手,不明白为什么会发生这个错误,有人能帮我解释一下我在这里做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-10 13:58:13

实际上,您从未运行过SQLAlchemy查询,因此返回的是查询本身:

代码语言:javascript
复制
return db.query(models.Userentity).filter_by(id=id)

相反,您应该让SQLAlchemy通过以下任一方式运行您的查询:

代码语言:javascript
复制
# raise an exception if not exactly one row is returned (so more than one or zero)
return db.query(models.Userentity).filter_by(id=id).one()

# Either one or zero rows - return `None` if user wasn't found
return db.query(models.Userentity).filter_by(id=id).one_or_none()

# Return None if user isn't found, otherwise return the first row
# (multiple rows isn't an error)
return db.query(models.Userentity).filter_by(id=id).first()

下一次附加时,在视图函数的return调用处设置调试器断点(或者至少对值进行print ),您就可以确切地看到要返回到FastAPI进行序列化的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69515092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档