验证后台最后一组API时,查询已有数据报错。
@application.get('/get_data')
def get_data(city: str = None, skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
data = crud.get_data(db, city=city, skip=skip, limit=limit)
return data
如果查询已存在数据,终端报错内存溢出.........但之前查询不存在数据或不填入城市名称时并不会报错
FROM data
WHERE EXISTS (SELECT 1
FROM city
WHERE city.id = data.city_id AND city.province = ?) ORDER BY data.date DESC
2021-04-13 22:02:16,059 INFO sqlalchemy.engine.base.Engine ('Shanghai',)
Fatal Python error: Cannot recover from stack overflow.
这个问题搞了我一晚上, 终于找到问题出在哪了……
def get_data(db: Session, city: str = None, skip: int = 0, limit: int = 10): if city: return db.query(models.Data).filter(models.Data.city.has(province=city)) return db.query(models.Data).order_by(desc(models.Data.confirmed)).offset(skip).limit(limit).all()
这段代码里, 当 city 没有值的时候, 是走下面一条, 注意到最后一行有一个 .all()
这个方法会传回真实数据的 list
反观 if 为真的时候, 结尾没有 .all(), 这个时候返回的是一个 Query, 不是 list, 自然也无法被 fastapi 转为有意义的输出, 就报错了. 我是加上 .all() 之后, 就可以正常跑了