我正在尝试使用.join()方法使用SQLAlchemy从多个表中检索数据。
当我运行查询时,我希望返回一个对象,该对象具有来自不同表的所有数据,因此我可以使用a.area_name,依此类推,其中area_name在所连接的表之一上。下面是我正在运行的查询和表布局,如果有人可以提供深入了解如何实现我想要的行为,我将不胜感激!我已经能够使用具有相同语法的.join()方法来匹配结果并返回它们,我认为它也会从行中返回额外的数据,因为它会连接表(也许我误解了方法有效或如何通过查询对象检索信息?)。
如果它有助于故障排除,我正在使用MySQL作为数据库
查询:
a = User.query.filter(User.user_id==1).join(UserGroup,
User.usergroup==UserGroup.group_id).join(Areas, User.area==Areas.area_id).first()
和表:
class User(db.Model):
user_id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(20), unique=True)
usergroup = db.Column(db.Integer, db.ForeignKey('user_group.group_id'), nullable=False)
area = db.Column(db.Integer, db.ForeignKey('areas.area_id'), nullable=False)
class UserGroups(db.Model):
id = db.Column(db.Integer, primary_key=True)
group_id = db.Column(db.Integer, nullable=False, unique=True)
group_name = db.Column(db.String(64), nullable=False, unique=True)
class Areas(db.Model):
id = db.Column(db.Integer, primary_key=True)
area_id = db.Column(db.Integer, nullable=False, unique=True)
area_name = db.Column(db.String(64), nullable=False, unique=True)
因此,似乎我需要对查询使用不同的方法,并且它返回一个元组,然后我需要对其进行解析。
起作用的是:
a = db.session.query(User, UserGroups, Areas
).filter(User.user_id==1
).join(UserGroup,User.usergroup==UserGroup.group_id
).join(Areas, User.area==Areas.area_id
).first()
其余的保持不变。然后返回一个元组,我可以解析其中来自User的数据是a [0],来自UserGroups的数据是a [1],而Areas是a [2]。然后,我可以使用[1] .group_name等访问group_name列。
希望这可以帮助其他尝试使用此方法的人!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句