why does db.query(Item).all().filter(Item.is_active == True) fail with error AttributeError: 'list' object has no attribute 'filter'

why does db.query(Item).all().filter(Item.is_active == True) fail with error AttributeError: 'list' object has no attribute 'filter'

正如标题所说,在 db.query(Item).all() 之后添加 .filter 失败并出现 AttributeError: 'list' object has no attribute 'filter' .

    items = db.query(Item).all().filter(Item.is_active == True)
    return items

但是如果我删除 .filter 它可以工作,但我真的很想过滤。

def list_items(db : Session):
    items = db.query(Item).all()
    return items

这是路线:

@router.get("/all", response_model=List[ShowItem])
def read_items(db: Session = Depends(get_db)):
    items = list_items(db=db)
    return items

这里是 class:

class Item(BaseModel):
    name: str
    price: int

    class Config():
        orm_mode = True

这是 Table 数据库模型:

class Item(Base):
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, nullable=False)
    price = (Column(Integer, nullable=False))
    is_active = Column(Boolean(), default=True)

.all() 方法 returns 没有 filter 方法的列表,您需要首先使用 filter 然后 all 替换

items = db.query(Item).all().filter(Item.is_active == True)

使用

items = db.query(Item).filter(Item.is_active == True).all()