@router.get("/products", tags=["Product"], response_model=list[schemas.Product])
def get_all_product(db: Session = Depends(get_db)):
return get_products(db)
def get_products(db: Session):
products = db.query(models.Product).all()
return products
上面的代码运行良好,当我进入localhost:5000/products时,我得到了一个JSON文件。
我想将该JSON文件保存到我的计算机上,但是下面的代码返回了一个错误:
def get_all_product(db: Session = Depends(get_db)):
with open('save_products.json', 'w', encoding = 'utf-8' ) as fp:
json.dump(get_products(db), fp)
return get_products(db)
TypeError:Product类型的对象不是JSON可序列化的。
我知道我必须使我的'Product'类可序列化,但似乎FastAPI本身已经可以做到这一点(否则我不会通过我的请求获得JSON文件)。
1条答案
按热度按时间amrnrhlw1#
要将SQLAlchemy对象的列表转换为它们的Pydantic表示形式(这是FastAPI在返回它们时在内部执行的操作),可以使用Pydantic中的实用函数
parse_obj_as
。products
现在将是Pydantic Product对象的列表,而不是SQLAlchemy,并且这些对象可以通过Pydantics的常规序列化支持转换为dict:然后可以使用
json.dump
序列化此列表: