我有兩個以一對多關係加入的類(團隊與團隊中的玩家)。在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時,它是隊伍名單中所有球員的完整列表,而不是與篩選器/排序匹配的已排序,已過濾的球員列表。 –