首页 > 解决方案 > 在 SQLAlchemy 中引用连接对象属性

问题描述

我有一个包含用户、技能和技能尝试的数据库。我正在尝试找到一种更好的方法来计算用户的平均尝试分数,而无需将用户对象传递回该方法。

    class User(db.Model):
        id = db.Column(db.Integer, primary_key=True)
    
        assessments = db.relationship("SkillAttempt")

    class SkillAttempt(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        user_id = db.Column(db.Integer, db.ForeignKey("user.id")
        skill_id = db.Column(db.Integer, db.ForeignKey("skill.id")
        score = db.Column(db.Integer)
    
    class Skill(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        canvas_id = db.Column(db.Integer, unique=True)
        name = db.Column(db.String(255))
    
        attempts = db.relationship(
            "SkillAttempt",
            lazy="dynamic"
        )
    
        def __get_scores(self, user):
            return [
                item.score for item in self.attempts.filter(OutcomeAttempt.user_id == user.id).all()
            ]
    
        def average(self, user):
            scores = self.__get_scores(user)
            return sum(scores) / len(scores)

现在,我得到一个用户的分数是这样的:

user = User.query.get(1)
user.assessments[0].skill.highest(u)

是否有更好的查询方法,以便在过滤器中隐式引用用户对象?

标签: pythonflask-sqlalchemy

解决方案


推荐阅读