我正在编写一个 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"}
所以您正在寻找这样的东西?
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()
附注不要忘记始终关闭您的会话