バージョン0.7.4以降
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のようなクエリをサイレントに生成していました。 0.9.1の変更ログノート
警告を発するように動作が変更されたことに注意してください:
私たちは実際に今夜働いているところでこれに遭遇し、実際に私たちのコードが次の警告を発していることを発見しました(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()
この例では、更新を選択に変換し、更新を1つのテーブルに変換することを選択しました。