我有两个以一对多关系加入的类(团队与团队中的玩家)。在SQLAlchemy中对联合实体进行过滤和排序
我想查询某个特定团队的所有玩家的特定位置,并以最后的名字排序。
我的查询看起来到目前为止是这样的:
query = db.session.query(Team).join(Player) \
.filter(Team.team_id = team) \ #team is passed in to the function
.filter(Player.position.in_(['QB', 'RB', 'WR', 'TE'])) \
.order_by(Player.last_name).order_by(Player.first_name).first()
的SQL据此产生当然除了它缺少的球员表的映射字段
SELECT team.team_id AS team_team_id, team.name AS team_name, team.city AS team_city, team.state AS team_state, team."stadiumName" AS "team_stadiumName"
FROM team JOIN player ON team.team_id = player.team
WHERE team.team_id = :team_id_1 AND player.position IN (:position_1, :position_2, :position_3, :position_4) ORDER BY player.last_name, player.first_name
如果我使用的查询(队球员)我得到元组。现在,它忽略了Player对象上的过滤器和orderby子句。我确定这是我错过的小事。
每建议,下面我试图做一个元组查询:
teams, players = db.session.query(Team, Player) \
.filter(Team.team_id == team) \
.filter(Player.position.in_(['QB', 'RB', 'WR', 'TE'])) \
.order_by(Player.last_name).order_by(Player.first_name)
这导致
ValueError: too many values to unpack (expected 2)
你的意思是它忽略了你的过滤器和ORDER_BY?他们在SQL中。你只是想要一个'Player'对象列表吗? – univerio
是的。查询对象是与我的查询匹配的一个团队对象。当我打电话给query.Players时,它是队伍名单中所有球员的完整列表,而不是与筛选器/排序匹配的已排序,已过滤的球员列表。 –