From 180569992337435140549c71d67cd1b0729d89e7 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Tue, 8 Dec 2009 23:47:09 +0000 Subject: [PATCH] - merge r6549 of 0.5 branch - Fixed bug in query.update() when passing Cls.attribute as keys in the value dict and using synchronize_session='expire' ('fetch' in 0.6). [ticket:1436] --- CHANGES | 4 ++++ lib/sqlalchemy/orm/query.py | 2 +- test/orm/test_query.py | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index a70a017f67..6326030fc3 100644 --- a/CHANGES +++ b/CHANGES @@ -807,6 +807,10 @@ CHANGES combinations of reflected and non-reflected types to work with 0.5 style type reflection, such as PGText/Text (note 0.6 reflects types as their generic versions). [ticket:1556] + + - Fixed bug in query.update() when passing Cls.attribute + as keys in the value dict and using synchronize_session='expire' + ('fetch' in 0.6). [ticket:1436] - sql - Fixed bug in two-phase transaction whereby commit() method diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 978596f018..b57cdf65fe 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -1778,7 +1778,7 @@ class Query(object): for primary_key in matched_rows: identity_key = target_mapper.identity_key_from_primary_key(list(primary_key)) if identity_key in session.identity_map: - session.expire(session.identity_map[identity_key], values.keys()) + session.expire(session.identity_map[identity_key], [expression._column_as_key(k) for k in values]) for ext in session.extensions: ext.after_bulk_update(session, self, context, result) diff --git a/test/orm/test_query.py b/test/orm/test_query.py index be763f0096..765fd9222b 100644 --- a/test/orm/test_query.py +++ b/test/orm/test_query.py @@ -3578,6 +3578,10 @@ class UpdateDeleteTest(_base.MappedTest): eq_([john.age, jack.age, jill.age, jane.age], [25,27,19,27]) eq_(sess.query(User.age).order_by(User.id).all(), zip([25,27,19,27])) + sess.query(User).filter(User.age == 25).update({User.age: User.age - 10}, synchronize_session='fetch') + eq_([john.age, jack.age, jill.age, jane.age], [15,27,19,27]) + eq_(sess.query(User.age).order_by(User.id).all(), zip([15,27,19,27])) + @testing.resolve_artifact_names def test_update_with_bindparams(self): -- 2.47.3