Vanaf versie 0.7.4 sqlalchemy.sql.expression.update staat u toe om naar meerdere tabellen te verwijzen in de WHERE-component. Hiermee zou je een expressie kunnen bouwen en uitvoeren zoals:
users.update().values(name='ed').where(
users.c.name==select([addresses.c.email_address]).\
where(addresses.c.user_id==users.c.id).\
as_scalar()
)
(voorbeeld rechtstreeks van de bovenstaande link)
Het probleem dat ValAyal heeft is eigenlijk omdat Query.join()
wordt niet ondersteund met Query.update()
. Helaas genereerde dit tot 0.9.1 stilletjes vragen zoals degene die ValAyal hierboven deelde. De changelog-opmerkingen voor 0.9.1
merkt op dat het gedrag is gewijzigd om een waarschuwing af te geven:
We kwamen dit eigenlijk tegen waar ik vanavond aan het werk ben en ontdekten dat onze code in feite de volgende waarschuwing afgeeft (die zegt dat het een fout zal zijn in 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()
In ons geval hebben we ervoor gekozen om de update om te zetten in een select en een update naar één tabel.