小编典典

查询一对多关系SQLAlchemy

python

我正在尝试根据这些表中的用户查询用户。

class User(UserMixin, db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(64), unique=True, index=True)
    username = db.Column(db.String(64), unique=True, index=True)
    skills = db.relationship('Skill', backref='author', lazy='dynamic')

class Skill(db.Model):
    __tablename__ = 'skills'

    id = db.Column(db.Integer, primary_key=True)
    skill = db.Column(db.String(64), index=True)
    author_id = db.Column(db.Integer, db.ForeignKey('users.id'))

我在 用户 表中尝试了此 操作, 并收到此错误。

@classmethod
def users_by_skill(cls, skill):
    return User.query.join(Skill).filter(skill.skill).all()

AttributeError: 'str' object has no attribute 'skill'

我在哪里很想念?


阅读 211

收藏
2021-01-20

共1个答案

小编典典

您定义以下类方法:

@classmethod
def users_by_skill(cls, skill):
    return User.query.join(Skill).filter(skill.skill).all()

您可能希望像这样使用此功能:

users = Users.users_by_skill('nunchuk')

这意味着skillin中的参数users_by_skill是一个字符串。然后,您尝试使用skill.skill,基本上就像在做一样'nunchuk'.skill。Pythonskill在字符串类上没有属性,因此会出错。

filter函数实际上带有一个Criteria对象。换句话说,您没有向其传递类似的值"filter",而是向其传递了一个表示“技能表上的技能列必须等于’nunchuk’”这一概念的标准。您可以使用如下语法来做到这一点:

@classmethod
def users_by_skill(cls, skill_name):
    return User.query.join(Skill).filter(Skill.skill == skill_name).all()
2021-01-20