问答详情
源自:7-5 开发 COVID-19 感染数据查询接口

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.


提问者:虾叔叔 2021-04-13 22:12

个回答

  • duskash
    2021-10-04 22:15:57

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

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