我想公开一个在 POST 请求中接收数据的 API 方法(用于 beta 注册 API),并在已有匹配模型时使用新值进行更新。实现这一目标的最佳方法是什么?目前我正在这样做(有点简化):
我的 ORM 模型(SqlAlchemy):
class BetaORM(Base):
__tablename__ = "betasignup"
email = Column(EmailType, primary_key=True)
fullname = Column(String, unique=False, index=False, nullable=True)
我的 Pydantic 模型:
class BetaCreate(BaseModel):
email: EmailStr
fullname: Optional[str]
我的 FastAPI 发布方法:
@app.post("/beta_signup")
def post_beta_signup(beta: schemas.BetaCreate, db: Session = Depends(get_db)):
return create_beta_signup(db=db,signup=beta)
还有我写的 CRUD 方法:
def create_beta_signup(db: Session, signup: schemas.BetaCreate):
db_beta = schemas.BetaORM(**signup.dict())
ret_obj = db.merge(db_beta)
db.add(ret_obj)
db.commit()
return ret_obj
使用 merge() 的一个问题是它依赖于与主键匹配,直接针对电子邮件地址 - 我宁愿使用代理键,这样我就可以拥有禁用/删除功能而不是被迫拥有数据库级别的电子邮件地址的唯一约束。