【发布时间】:2021-11-09 00:36:29
【问题描述】:
我在 FastAPI 中使用以下模型和架构。
型号
class Item(Base):
__tablename__ = "items"
id = Column(Integer, primary_key=True,index=True)
name = Column(String(80), nullable=False, unique=True,index=True)
price = Column(Float(precision=2), nullable=False)
description = Column(String(200))
store_id =Column(Integer,ForeignKey('stores.id'),nullable=False)
def __repr__(self):
return 'ItemModel(name=%s, price=%s,store_id=%s)' % (self.name, self.price,self.store_id)
class Store(Base):
__tablename__ = "stores"
id = Column(Integer, primary_key=True,index=True)
name = Column(String(80), nullable=False, unique=True)
items = relationship("Item",lazy="dynamic",primaryjoin="Store.id == Item.store_id")
def __repr__(self):
return 'Store(name=%s)' % self.name
架构
class ItemBase(BaseModel):
name: str
price : float
description: Optional[str] = None
store_id: int
class ItemCreate(ItemBase):
pass
class Item(ItemBase):
id: int
class Config:
orm_mode = True
class StoreBase(BaseModel):
name: str
class StoreCreate(StoreBase):
pass
class Store(StoreBase):
id: int
items: List[Item] = []
class Config:
orm_mode = True
我在数据库中创建了一个存储对象。当我尝试使用以下 API 获取存储在数据库中的所有商店时。
@app.get('/stores', tags=["Store"],response_model=List[schemas.Store])
def get_all_stores(name: Optional[str] = None,db: Session = Depends(get_db)):
"""
Get all the Stores stored in database
"""
if name:
stores =[]
db_store = StoreRepo.fetch_by_name(db,name)
print(db_store)
stores.append(db_store)
return stores
else:
return StoreRepo.fetch_all(db)
[packages]
fastapi = "==0.68.1"
uvicorn = "==0.15.0"
sqlalchemy = "==1.4.23"
我收到以下异常
raise ValidationError(errors, field.type_)
pydantic.error_wrappers.ValidationError: Store 出现 1 个验证错误 响应 -> 0 -> 项目 value 不是一个有效的列表 (type=type_error.list)
如果我们从 API 中删除 response_model=List[schemas.Store],那么它就可以正常工作。
任何帮助将不胜感激。
【问题讨论】:
标签: python-3.x sqlalchemy fastapi