iT邦幫忙

0

Day 11 - CRUD 實戰 (二):從資料庫讀取資料 (Read)

  • 分享至 

  • xImage
  •  

成功寫入資料後,接下來我們要實作如何把資料撈出來。讀取資料通常分為兩種情境:取得「所有資料清單」以及取得「單筆指定資料」。

我們一樣透過 Depends(get_db) 把資料庫 session 拿進來用。在 SQLAlchemy 中,我們使用 db.query() 來進行查詢。

@app.get("/items/")
def read_items(skip: int = 0, limit: int = 10, db: Session = Depends(get_db)):

查詢多筆資料,並搭配我們之前學過的 skip 和 limit 達成簡單的分頁功能

items = db.query(models.Item).offset(skip).limit(limit).all()
return items

在這個多筆查詢中,.offset() 會跳過前幾筆,.limit() 會限制抓取的數量,最後的 .all() 會把結果轉成一個陣列回傳,這對於資料量大時的分頁非常實用。

接著是查詢單筆資料,並加入錯誤處理:

from fastapi import HTTPException

@app.get("/items/{item_id}")
def read_item(item_id: int, db: Session = Depends(get_db)):

透過 filter 設定條件,並用 first() 抓出第一筆符合的結果

item = db.query(models.Item).filter(models.Item.id == item_id).first()

if item is None:
raise HTTPException(status_code=404, detail="找不到該商品")

return item
這裡我們引入了 FastAPI 的 HTTPException。如果資料庫裡沒有這個 ID,程式不會報錯崩潰,而是優雅地回傳 HTTP 狀態碼 404 (Not Found) 給前端,這才是標準的 RESTful API 設計!


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言