· 约 2 分钟
20-FastAPI进阶-ORM操作数据-查询数据
学习目标
- 学会使用 ORM 查询数据
- 理解查询单条和查询多条的差别
- 认识
select()、scalars()、get()的常见用法
核心概念
- 查询单条数据时,常见方法有:
db.get(User, id):按主键查询db.scalar(select(...)):取一条标量结果
- 查询多条数据时,常见方法是:
db.scalars(select(User)).all()
select()是 SQLAlchemy 2.0 风格中非常核心的查询入口。
代码示例
from sqlalchemy import select
@app.get("/users")
def list_users(db: DbSession):
stmt = select(User).order_by(User.id)
users = db.scalars(stmt).all()
return [UserOut.model_validate(user) for user in users]
@app.get("/users/{user_id}")
def get_user(user_id: int, db: DbSession):
user = db.get(User, user_id)
if user is None:
raise HTTPException(status_code=404, detail="用户不存在")
return UserOut.model_validate(user)
案例理解
/users查询所有用户,并按id升序返回。/users/{user_id}查询单个用户,更适合详情页或编辑页场景。- 列表接口和详情接口,是后台项目最常见的两类查询接口。
易错点
db.execute(select(User))和db.scalars(select(User))返回结果形式不同,初学时很容易混淆。db.get()只适合按主键查。- 列表查询如果不写
order_by,分页时结果顺序可能不稳定。
我的补充
- 你可以把
select(User)理解成“查 users 表”。 - 以后无论条件再复杂,本质上都是在
select(User)的基础上不断追加条件、排序、分页。 - 这一节先把“查询骨架”记牢,后面的比较查询、模糊查询都会更自然。