我正在尝试根据这些表中的用户查询用户。
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'
我在哪里很想念?
您定义以下类方法:
您可能希望像这样使用此功能:
users = Users.users_by_skill('nunchuk')
这意味着skillin中的参数users_by_skill是一个字符串。然后,您尝试使用skill.skill,基本上就像在做一样'nunchuk'.skill。Pythonskill在字符串类上没有属性,因此会出错。
skill
users_by_skill
skill.skill
'nunchuk'.skill
该filter函数实际上带有一个Criteria对象。换句话说,您没有向其传递类似的值"filter",而是向其传递了一个表示“技能表上的技能列必须等于’nunchuk’”这一概念的标准。您可以使用如下语法来做到这一点:
filter
Criteria
"filter"
@classmethod def users_by_skill(cls, skill_name): return User.query.join(Skill).filter(Skill.skill == skill_name).all()