user = db.query(User).filter(User.id == user_id).first()
if not user:
raise HTTPException(status_code=404, detail="User not found")
return user
复制代码
3. 常见问题解决方案
3.1 数据库会话报错处理惩罚
报错信息:sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table 解决方案:
检查是否调用Base.metadata.create_all(bind=engine)
确认数据库文件路径正确
确保模型类正确界说了__tablename__
3.2 数据验证错误
报错信息:422 Unprocessable Entity,请求体验证失败 排查步骤:
检查Pydantic模型字段范例界说
验证请求Content-Type是否为application/json
利用Swagger UI测试接口,观察请求示例格式
课后Quiz
问题1:当需要添加用户年龄字段时,应怎样修改模型?
A. 同时在SQLAlchemy模型和Pydantic模型中添加字段
B. 只需修改SQLAlchemy模型
C. 需要同时修改SQLAlchemy模型和Pydantic模型,并实行数据库迁徙 答案:C
剖析:SQLAlchemy模型负责数据库结构,Pydantic模型负责数据验证。新增字段需两者同时修改,并通过迁徙工具更新数据库表结构。 问题2:怎样防止用户注册时邮箱重复?
A. 在数据库层面设置唯一约束
B. 在业务逻辑中先查询是否存在
C. 同时利用A和B 答案:C
剖析:数据库唯一约束是最终保障,业务逻辑中的检查能提前发现错误,提拔系统友好性。两者联合是最佳实践。
4. 高级设置本领