我是 fastapi 新手,我希望能够在存款时更新我的银行帐户信息。我不知道如何做到这一点,因为我不知道补丁是如何工作的。存款中使用的逻辑是我在创建银行帐户时使用的逻辑(显然它们不应该以相同的方式工作)。这是我的模型:
class Account(Base):
__tablename__ = "accounts"
id = Column(Integer, primary_key=True, index=True)
name = Column(String)
deposits_made = Column(Integer)
total = Column(Integer)
class PaymentRequest(BaseModel):
bank_id: str
amount: int
def get_db():
try:
db = SessionLocal()
yield db
finally:
db.close()
@app.patch("/deposit")
def deposit(request: PaymentRequest, db: Session = Depends(get_db)):
account = db.query(Account)
account = accounts[request.id]
account.total += request.amount
account.deposits_made += 1
db.add(account)
db.commit()
return{
"code":"success",
"message":"donation made"
}
最佳答案
您的表格需要具体
class Account(Base):
__tablename__ = "accounts"
id = Column(Integer, primary_key=True, index=True)
name = Column(String)
deposits_made = Column(Integer)
total = Column(Integer)
您的架构应该很好地反射(reflect)您的表格,但如果您喜欢使用现有的内容:
class PaymentRequest(BaseModel):
bank_id: str
amount: int
然后必须进行一些计算才能成功更新表 因为必须上 table 的是:
{'name':name, 'deposits_made':deposits_made, 'total ':total}
请记住,您传入的数据只是:
bank_id: str
amount: int
话虽这么说,您的 table 没有为此做出规定,
如果bank_id
与帐户表上的名称相同您至少应该给它一个更好的名称
depositor_name ,独特,...
当您决定对表格进行更改时,下面的代码将会有所帮助:
@app.put("/deposit/{id}")
def deposit(id, request:schemas.PaymentRequest, db:Session=Depends(get_db)):
old_account = db.query(models.Account).filter(models.Account.id == id)
if not old_account.first():
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND,detail=f'old_account with the id {id} is not available')
old_account.update({'name':name, 'deposits_made':deposits_made, 'total ':total})
db.commit()
return {"code":"success","message":"donation made"}
关于python - 使用 fastapi 更新数据库中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66523702/