You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Repository模式下合并SQLAlchemy查询?FastAPI仓库方法整合

合并SQLAlchemy查询方法的实现方案

完全可以把这三个查询方法合并成一个,通过引入可选参数区分不同查询场景,同时保留原有功能。以下是具体实现:

class MessageRepository:
    def __init__(self, db: Session):
        self.db = db
    
    def get_messages(self, user, message_type: str = 'inbox', only_unseen: bool = False):
        # 校验消息类型参数的合法性
        if message_type not in ('inbox', 'outbox'):
            raise ValueError("message_type只能是'inbox'或'outbox'")
        
        query = self.db.query(models.Messages)
        
        # 根据消息类型添加基础过滤条件
        if message_type == 'inbox':
            query = query.filter(models.Messages.receiver == user)
            # 仅在收件箱场景下处理未读过滤
            if only_unseen:
                query = query.filter(models.Messages.seen == False)
        elif message_type == 'outbox':
            query = query.filter(models.Messages.sender == user)
            # 发件箱场景下未读参数无意义,直接抛出异常避免误用
            if only_unseen:
                raise ValueError("发件箱场景不支持only_unseen参数")
        
        return query.all()

用法对应原方法

  • 原get_inbox_messages:repo.get_messages(user) 或 repo.get_messages(user, message_type='inbox')
  • 原get_outbox_meesages:repo.get_messages(user, message_type='outbox')
  • 原get_inbox_unseen_meesages:repo.get_messages(user, only_unseen=True)

另外注意修正了原代码中的拼写错误:方法名里的meesages应为messages。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:00:47