[英]update object in database with fastapi
我是 fastapi 的新手,我希望能夠在存款時更新我的銀行賬戶信息。 我不確定如何執行此操作,因為我不確定補丁是如何工作的。 存款中使用的邏輯是我在創建銀行賬戶時使用的(顯然它們不應該工作相同)。 這是我的 model:
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)
您的架構應該很好地反映您的表格,但如果您喜歡 go 與您所擁有的:
class PaymentRequest(BaseModel):
bank_id: str
amount: int
然后必須進行一些計算才能成功更新表,因為表中的 go 必須是:
{'name':name, 'deposits_made':deposits_made, 'total ':total}
請記住,您的傳入數據只是:
bank_id: str
amount: int
而你的餐桌上沒有這樣的規定,話雖如此,
如果bank_id
與 Account 表上的名稱相同, you should have given it a better name at least
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"}
PUT
請求的思想是更新某個object的數據。
首先,對於REST APIs
,通常通過 id 引用 url 中的 object。 你的 url 會變成這樣domain.com/path/to/resource/id
https://www.edureka.co/blog/what-is-rest-api/
話雖如此,您的代碼現在如下所示
@app.patch("/deposit/{id}")
def deposit(request: PaymentRequest, db: Session = Depends(get_db)):
# Not sure what kind of orm you are using, but you get the idea
account = db.query(Account.id=id)
account = accounts[request.id]
account.total += request.amount
account.deposits_made += 1
db.add(account)
db.commit()
return{
"code":"success",
"message":"donation made"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.