我正在尝试根据这些表中的技能查询用户。
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'
我在哪里很想念?
最佳答案
您定义以下类方法:
@classmethod
def users_by_skill(cls, skill):
return User.query.join(Skill).filter(skill.skill).all()
您可能希望像这样使用此功能:
users = Users.users_by_skill('nunchuk')
这意味着
skill
中的users_by_skill
参数是一个字符串。然后,尝试使用skill.skill
,本质上就像在做'nunchuk'.skill
。 Python在字符串类上没有skill
属性,因此会出现错误。filter
函数实际上接受一个Criteria
对象。换句话说,您没有像"filter"
这样传递值,而是给它传递了表示“技能表上的技能列必须等于'nunchuk'”概念的标准。您可以使用如下语法来做到这一点:@classmethod
def users_by_skill(cls, skill_name):
return User.query.join(Skill).filter(Skill.skill == skill_name).all()
关于python - 查询一对多关系SQLAlchemy,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24454910/