I have the following query:
matches = dal.session.query(Bet.profit_loss)
matches = (
matches
.select_from(Bet)
.join(Schedule, Bet.schedule_id.__eq__(Schedule.id_))
.join(
GamesATP,
and_(
Schedule.tour_id.__eq__(tour_id),
Schedule.tournament_id.__eq__(GamesATP.ID_T_G),
Schedule.round_id.__eq__(GamesATP.ID_R_G),
Schedule.player_id_p1.__eq__(GamesATP.ID1_G),
Schedule.player_id_p2.__eq__(GamesATP.ID2_G),
)
)
)
matches = matches.filter(
Bet.complete.__eq__(0),
or_(Bet.actual_odds.__ne__(None), Bet.actual_odds.__ne__("")),
or_(Bet.actual_stake.__ne__(None), Bet.actual_stake.__ne__("")),
or_(Bet.profit_loss.__eq__(None), Bet.profit_loss.__eq__("")),
(
Schedule.p1_win - (1 / Bet.p1_max_odds)
>=
1 - Schedule.p1_win - (1 / Bet.p2_max_odds)
)
)
I'm looking to update the result using the following:
for match in matches:
matches.update(
{Bet.profit_loss: Bet.actual_stake * (Bet.actual_odds - 1)},
synchronize_session=False,
)
However, I get the error message:
InvalidRequestError: Can't call Query.update() or Query.delete() when join(), outerjoin(), select_from(), or from_self() has been called
I have no idea how to get around this as SQL seems fine with update queries that have joins...?