FastAPI中的数据库CRUD操作

本指南将介绍如何在FastAPI项目中使用SQLModel进行数据库CRUD(增删改查)操作。


1. Session介绍

Session是SQLModel中进行数据库操作的核心对象。

  • Name
    特性
    Type
    features
    Description

    Session主要特性

Session特性

# Session的主要功能
• 管理数据库连接
• 处理事务
• 缓存查询结果
• 跟踪对象变更
• 提供CRUD操作接口
• 自动处理关系映射

2. CRUD类封装

通过类封装CRUD操作,提高代码复用性。

  • Name
    使用
    Type
    usage
    Description

    基本使用示例

CRUD类示例

from typing import Optional, List
from uuid import UUID
from sqlmodel import Session, select
from app.models.table import User

class UserCRUD:
    def __init__(self, session: Session):
        self.session = session
        
    # 查询单个用户
    def get_user(self, user_id: str) -> User | None:
        """根据UUID获取用户"""
        return self.session.get(User, user_id)
        
    # 条件查询
    def get_user_by_phone(self, phone: str) -> Optional[User]:
        """根据手机号查询用户"""
        return self.session.exec(
            select(User)
            .where(User.phone == phone)
        ).first()
        
    # 查询列表
    def get_users(self, skip: int = 0, limit: int = 100) -> List[User]:
        """获取用户列表"""
        statement = select(User).offset(skip).limit(limit)
        return self.session.exec(statement).all()
        
    # 创建用户
    def create_user(self, user: User) -> User:
        """创建新用户"""
        self.session.add(user)
        self.session.commit()
        self.session.refresh(user)
        return user
        
    # 更新用户
    def update_user(self, user_id: UUID, update_data: dict) -> Optional[User]:
        """更新用户信息"""
        user = self.get_user(user_id)
        if not user:
            return None
            
        for key, value in update_data.items():
            setattr(user, key, value)
            
        self.session.add(user)
        self.session.commit()
        self.session.refresh(user)
        return user
        
    # 删除用户
    def delete_user(self, user_id: UUID) -> bool:
        """软删除用户"""
        user = self.get_user(user_id)
        if not user:
            return False
            
        user.is_deleted = True
        self.session.add(user)
        self.session.commit()
        return True

3. 查询操作详解

了解SQLModel中的各种查询方法。

  • Name
    查询
    Type
    query
    Description

    查询操作说明

查询操作

# 1. 直接获取
user = session.get(User, user_id)

# 2. select查询
statement = select(User).where(User.username == "test")
user = session.exec(statement).first()

# 3. 条件组合
statement = select(User).where(
    User.is_active == True,
    User.age >= 18
)

# 4. 排序和分页
statement = select(User)\
    .order_by(User.created_at.desc())\
    .offset(skip)\
    .limit(limit)
    
# 5. 关系查询
statement = select(User, Post)\
    .join(Post, User.id == Post.user_id)

4. 最佳实践

SQLModel CRUD操作的最佳实践建议。

  • Name
    实践
    Type
    practices
    Description

    最佳实践建议

最佳实践

1. Session管理:
• 使用上下文管理器(with语句)
• 及时关闭session
• 异常时回滚事务

2. 查询优化:
• 合理使用select语句
• 避免N+1查询问题
• 需要时使用join优化

3. 数据验证:
• 创建前验证数据完整性
• 更新时验证字段合法性
• 删除时检查关联依赖

4. 异常处理:
• 捕获数据库异常
• 提供友好的错误信息
• 保持数据一致性

这篇文章对你有用吗?