От версия 0.7.4 sqlalchemy.sql.expression.update ви позволява да се обърнете към множество таблици в клаузата WHERE. С това можете да създадете и изпълните израз като:
users.update().values(name='ed').where(
users.c.name==select([addresses.c.email_address]).\
where(addresses.c.user_id==users.c.id).\
as_scalar()
)
(пример направо от връзката по-горе)
Проблемът, който има ValAyal всъщност е, защото Query.join()
не се поддържа с Query.update()
. За съжаление, до 0.9.1 това безшумно генерираше заявки като тази, която ValAyal сподели по-горе. бележки за промени за 1
9. отбелязва, че поведението е променено, за да излъчва предупреждение:
Всъщност се натъкнахме на това, където работя точно тази вечер и открихме, че нашият код всъщност излъчва следното предупреждение (което казва, че ще бъде грешка в 1.0):
SAWarning: Can't call Query.update() or Query.delete() when join(), outerjoin(), select_from(), or from_self() has been called. This will be an exception in 1.0
self._validate_query_state()
В нашия случай избрахме да преобразуваме актуализацията в избрана и актуализация в една таблица.