如何计算fastapi中的总小时数?

How to count total hour in fastapi?

我正在尝试计算总工作时间并加起来 is_overtime 个数字,但我不知道该怎么做。

到目前为止我的代码:

模特:

class Workhour(IdMixin, Base, TimestampMixin):

    __tablename__ = "workhour"

    user_id = Column(Integer, ForeignKey("user.id"))
    task_id = Column(Integer, ForeignKey("task.id"))
    date = Column(Date)
    hour = Column(Numeric(4,2))
    is_overtime = Column(Boolean, default=False)
    description = Column(String(255), index=True)
    active = Column(Boolean, default=True)

    user = relationship("User", back_populates="workhours", uselist=False)
    task = relationship("Task", back_populates="workhours", uselist=False)

crud.py

def get_totalworkhours_by_user_id(db: Session, user_id: int, skip: int = 0):
    return db.query(models.Workhour.hour).filter(models.Workhour.user_id == user_id).offset(skip).count()

schemas.py

class WorkhourBase(BaseModel):
    user_id: Optional[int] = None
    task_id: int
    date: datetime.date
    hour: float
    description: Optional[str] = None
    is_overtime: Optional[bool] = False

class Workhour(WorkhourBase):
    id: int
    class Config:
        orm_mode = True

class WorkhourFull(Workhour):
    user: Optional[User]
    task: Optional[Task]

api/workhour.py

@router.get("/totalhour", response_model=schemas.WorkhourFull)
def read_totalworkhours(skip: int=0, user_id: int = None, db: Session = Depends(get_db)):
    if user_id:
        totalworkhours = crud.get_totalworkhours_by_user_id(db, skip=skip, user_id=user_id)
    return totalworkhours

这可能更像是一个 sqlalchemy 问题,而不是 FastAPI 问题,但类似于:

db.query(func.sum(Score.score)\
    .label("hours_worked"))\
    .filter(models.Workhour.user_id == user_id)\
    .first() 

应该会为您提供该特定用户 ID 的总工作小时数。 func 可以从 sqlalchemy.sql 导入:

from sqlalchemy.sql import func