成功寫入資料後,接下來我們要實作如何把資料撈出來。讀取資料通常分為兩種情境:取得「所有資料清單」以及取得「單筆指定資料」。
我們一樣透過 Depends(get_db) 把資料庫 session 拿進來用。在 SQLAlchemy 中,我們使用 db.query() 來進行查詢。
@app.get("/items/")
def read_items(skip: int = 0, limit: int = 10, db: Session = Depends(get_db)):
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)):
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 設計!