資料庫連線設定好了,資料表也定義好了。那麼,當前端發出一條 API 請求時,我們該怎麼把資料庫交給 API 使用呢?
FastAPI 提供了一個非常強大的核心功能,叫做「依賴注入 (Dependency Injection)」。簡單來說,我們可以寫一個函式,規定在每一次 API 呼叫時自動開啟一個資料庫對話(Session),並在 API 處理完畢後自動關閉它,確保資源不浪費也不會互相干擾。
讓我們回到 main.py,把這幾天的東西整合起來:
from fastapi import FastAPI, Depends
from sqlalchemy.orm import Session
import models
from database import engine, SessionLocal
models.Base.metadata.create_all(bind=engine)
app = FastAPI()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@app.get("/items/db-test")
def test_db_connection(db: Session = Depends(get_db)):
return {"message": "資料庫連線與依賴注入成功!"}
程式碼解析:
models.Base.metadata.create_all(bind=engine) 會檢查資料庫,如果資料表不存在就會自動幫你建好。
get_db 就是我們的依賴函式。yield db 會把資料庫交給 API 使用,等 API 執行完後,就會走到 finally 執行 db.close() 來安全地關閉連線。
在 API 路由中,只要寫 db: Session = Depends(get_db),FastAPI 就會在背後幫你把一切打理好。這種寫法非常優雅,也是 FastAPI 適合開發大型專案的關鍵原因。