如何在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
相关产品推荐
相关产品推荐

