gpt4 book ai didi

python - 查询一对多关系 SQLAlchemy

转载 作者:太空宇宙 更新时间:2023-11-04 09:01:58 24 4
gpt4 key购买 nike

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

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'))

我在 User 表中尝试了这个,但遇到了这个错误。

@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')

这意味着 users_by_skill 中的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com