संस्करण 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 जैसे प्रश्नों को उत्पन्न कर रहा था। 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()
हमारे मामले में, हमने अपडेट को चुनिंदा में और अपडेट को एक टेबल में बदलने का विकल्प चुना है।