Pada versi 0.7.4 sqlalchemy.sql.expression.update tidak memungkinkan Anda untuk merujuk ke beberapa tabel dalam klausa WHERE. Dengan ini, Anda dapat membuat dan menjalankan ekspresi seperti:
users.update().values(name='ed').where(
users.c.name==select([addresses.c.email_address]).\
where(addresses.c.user_id==users.c.id).\
as_scalar()
)
(contoh langsung dari link di atas)
Masalah yang dialami ValAyal sebenarnya karena Query.join()
tidak didukung dengan Query.update()
. Sayangnya, hingga 0.9.1 ini diam-diam menghasilkan pertanyaan seperti yang dibagikan ValAyal di atas. catatan log perubahan untuk 0.9.1
mencatat bahwa perilaku telah dimodifikasi untuk mengeluarkan peringatan:
Kami benar-benar mengalami ini di mana saya bekerja malam ini dan menemukan bahwa kode kami, pada kenyataannya, memancarkan peringatan berikut (yang mengatakan itu akan menjadi kesalahan dalam 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()
Dalam kasus kami, kami memilih untuk mengonversi pembaruan menjadi pilihan dan pembaruan ke satu tabel.