为了账号安全,请及时绑定邮箱和手机立即绑定

Fatal Python error: Cannot recover from stack overflow.

验证后台最后一组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.


正在回答

1 回答

这个问题搞了我一晚上, 终于找到问题出在哪了……

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() 之后, 就可以正常跑了

3 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

Fatal Python error: Cannot recover from stack overflow.

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信