簡體   English   中英

使用 fastapi 更新數據庫中的 object

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM