Fatal Python error: Cannot recover from stack overflow.

来源:7-5 开发 COVID-19 感染数据查询接口

虾叔叔

2021-04-13 22:12

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

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

高性能 FastAPI 框架入门精讲

FastAPI 框架快速上手开发,结合 API 交互文档逐个讲解核心模块的使用。

12295 学习 · 87 问题

查看课程

相似问题