FastAPI + SQLAlchemy 中的 select().where() 實例說明
在 FastAPI 中使用 SQLAlchemy 的 async 架構時,select().where()
是查詢的標準寫法之一。
📦 範例模型
from sqlalchemy import String, Integer, Column
from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
🧪 查詢方式(async)
from sqlalchemy import select
async def get_user_by_name(name: str, session: AsyncSession):
stmt = select(User).where(User.name == name)
result = await session.execute(stmt)
return result.scalar_one_or_none()
select(User)
:選出 User 模型.where(User.name == name)
:加條件session.execute(stmt)
:執行 SQL.scalar_one_or_none()
:取出單一結果(或 None)
🧱 錯誤與調整
- 記得用
await
- session 必須是
AsyncSession
.first()
也能用,但.scalar_one_or_none()
更嚴謹
💡 補充
若要查多筆,用 scalars().all()
取出清單:
result = await session.execute(select(User).where(User.name.like("%kat%")))
users = result.scalars().all()