如何处理Fastapi中的数据库提交错误

问题描述 投票:0回答:1

我正在编写一个 API 来记录 Raspberry Pico 的天气读数。我需要帮助的是错误处理。从技术上讲,此处显示的代码捕获错误并发送回存在错误的响应,但实际上并没有正确执行此操作。

首先,我需要让它发回实际的错误。我本以为从 e 中取出它会很容易,但我做不到。

接下来,这会发回 200 OK 代码,这不太好。当服务器端出现故障时,我需要发回正确的代码。我不知道正确的代码应该是什么,也不知道如何将其发回,因此我也可以在这里使用一些帮助。

最后,我需要在这里做回滚吗?我应该关闭会议吗?话虽这么说,如果一切顺利的话我应该结束会议吗?

@app.post("/reading")
async def record_reading(sensor_id: int, fahrenheit: float, pressure: float, humidity: float, dew_point: float, battery: float):
    weather_reading = WeatherReading(
                    sensor_id = sensor_id,
                    fahrenheit = fahrenheit,
                    pressure = pressure,
                    humidity = humidity,
                    dew_point = dew_point,
                    battery = battery
                    )
    try:
        session.add(weather_reading)
        session.commit()
        return {"reading added"}
    except SQLAlchemyError as e:
        session.rollback()
        return {"Error during commit"}
python error-handling sqlalchemy fastapi
1个回答
0
投票

所以您正在寻找这样的东西?

from fastapi import HTTPException
from sqlalchemy.exc import SQLAlchemyError

@app.post("/reading")
async def record_reading(sensor_id: int, fahrenheit: float, pressure: float, humidity: float, dew_point: float, battery: float):
    weather_reading = WeatherReading(
        sensor_id=sensor_id,
        fahrenheit=fahrenheit,
        pressure=pressure,
        humidity=humidity,
        dew_point=dew_point,
        battery=battery
    )
    try:
        session.add(weather_reading)
        session.commit()
        return {"message": "Reading successfully recorded"}
    except SQLAlchemyError as e:
        session.rollback()
        raise HTTPException(status_code=500, detail="Something went wrong on server.Please try again later.")
    finally:
        session.close()

附注不要忘记始终关闭您的会话

© www.soinside.com 2019 - 2024. All rights reserved.