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

如何使用SQLAlchemy获取单个用户的所有评分?

获取用户对所有建议的评分记录

你的需求完全可行,但当前的数据模型无法实现——因为Suggestion表中的rating字段是全局单一值,无法区分不同用户对同一条建议的评分。要实现多用户对多建议的独立评分,需要添加用户-建议评分关联表,用来存储每个用户对每条建议的具体评分。

修正数据模型

以下是调整后的SQLAlchemy模型代码:

from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, Session
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

# 中间关联表:存储用户-建议-评分的对应关系
class UserSuggestionRating(Base):
    __tablename__ = "user_suggestion_ratings"
    user_id = Column(Integer, ForeignKey("users.user_id"), primary_key=True)
    s_id = Column(Integer, ForeignKey("suggestions.s_id"), primary_key=True)
    rating = Column(Integer, nullable=False)

    # 关联到用户和建议表
    user = relationship("User", back_populates="ratings")
    suggestion = relationship("Suggestion", back_populates="ratings")

class Suggestion(Base):
    __tablename__ = "suggestions"
    s_id = Column("s_id", Integer, primary_key=True, autoincrement=True)
    content = Column("content", String, nullable=False)

    # 关联到评分记录
    ratings = relationship("UserSuggestionRating", back_populates="suggestion")

    def __repr__(self):
        return f"Suggestion #{self.s_id}: {self.content}"

class User(Base):
    __tablename__ = "users"
    user_id = Column("user_id", Integer, primary_key=True)

    # 关联到评分记录
    ratings = relationship("UserSuggestionRating", back_populates="user")

    def __init__(self, user_id):
        self.user_id = user_id

    def __repr__(self):
        return f"User #{self.user_id}"

查询指定用户的所有评分记录

假设你要查询用户#1的所有评分,可以通过以下代码实现:

# 创建会话
session = Session()

# 查询用户#1的所有评分,关联建议内容
user_ratings = session.query(
    Suggestion.content,
    UserSuggestionRating.rating
).join(UserSuggestionRating).filter(
    UserSuggestionRating.user_id == 1
).all()

# 输出结果
for content, rating in user_ratings:
    print(f"建议:{content},评分:{rating}")

# 关闭会话
session.close()

这段代码会返回类似如下结果:

建议:Improve the interface,评分:10
建议:Fix bugs,评分:5

补充说明

  • 中间表user_suggestion_ratings的主键由user_id和s_id联合组成,确保同一个用户不会对同一条建议重复评分(如果需要允许修改评分,可去掉联合主键,改用自增主键,或保留联合主键并更新评分值)。
  • 如果需要获取所有建议(包括该用户未评分的),可以使用左连接,未评分的建议会显示rating为None,调整查询语句如下:
user_ratings = session.query(
    Suggestion.content,
    UserSuggestionRating.rating
).outerjoin(
    UserSuggestionRating,
    (Suggestion.s_id == UserSuggestionRating.s_id) & (UserSuggestionRating.user_id == 1)
).all()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:18:34