我對這個框架相當陌生,但我正在為一家小公司開發時間表應用程序(API)。我遇到的問題是,當我從 mysql 選擇時間值時,我在 pydantic 模塊中收到以下錯誤:pydantic.error_wrappers.ValidationError: 2 validation errors for TimeSheetRange response -> 0 -> total invalid type; expected time, string, bytes, int or float (type=type_error) response -> 1 -> total invalid type; expected time, string, bytes, int or float (type=type_error)我已經嘗試了很多解決方法來從 mysql 獲取字符串時間,to_char()但也失敗了,但我更想知道這里的問題是什么,因為我想使用數據類型時間...schemas.pyfrom typing import List, Optionalfrom datetime import date, time, datetimefrom pydantic import BaseModelfrom . import models...class TimeSheetRange(BaseModel): user_id: int start: date total: time class Config: orm_mode = Truecrud.pydef get_timesheet_by_date_range_and_user(db: Session, user_id=int, date_start=datetime, date_end=datetime): return db.query(models.TimeSheet.user_id, \ func.date(models.TimeSheet.start).label('start'), \ func.sec_to_time(func.sum(func.timediff(models.TimeSheet.end,models.TimeSheet.start))).label('total') ) \ .filter(models.TimeSheet.user_id == user_id) \ .filter(func.date(models.TimeSheet.start) >= date_start) \ .filter(func.date(models.TimeSheet.end) <= date_end) \ .group_by(func.date(models.TimeSheet.start)) \ .all()[email protected]("/timesheets/range/", response_model=List[schemas.TimeSheetRange]) def read_timesheets(user_id: int, date_start:date = datetime.now().date(), date_end:date = datetime.now().date(), db: Session = Depends(get_db)): timesheets = crud.get_timesheet_by_date_range_and_user(db, user_id=user_id, date_start=date_start, date_end=date_end) return timesheets以及使用結果構建的 SQL 查詢:SELECT timesheet.user_id AS timesheet_user_id, date(timesheet.start) AS start, sec_to_time(sum(timediff(timesheet.end, timesheet.start))) AS total FROM 數據類型有問題time還是我錯過了一些非常愚蠢的東西?
1 回答

白板的微信
TA貢獻1883條經驗 獲得超3個贊
我認為這里的問題是,您使用的 Pydantic 模型需要一個time對象類型,而它應該需要一個timedelta類型,因為您的 sql 語句似乎表明您正在計算列的時間差total。
所以你的 Pydantic schemas.py 文件應該是:
from typing import List, Optional
from datetime import date, datetime, timedelta
from pydantic import BaseModel
from . import models
...
class TimeSheetRange(BaseModel):
user_id: int
start: date
total: timedelta
class Config:
orm_mode = True
添加回答
舉報
0/150
提交
取消