From c33e7c7bfa128fee5b1897a1eda9dd8cfc6ef25c Mon Sep 17 00:00:00 2001 From: Ants Aasma Date: Tue, 1 Jul 2008 16:51:14 +0000 Subject: [PATCH] query update and delete need to autoflush --- lib/sqlalchemy/orm/query.py | 4 ++++ test/orm/query.py | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 07caae07af..38edae5b67 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -1218,6 +1218,8 @@ class Query(object): primary_table = context.statement.froms[0] session = self.session + if self._autoflush: + session.flush() if synchronize_session == 'evaluate': try: @@ -1264,6 +1266,8 @@ class Query(object): primary_table = context.statement.froms[0] session = self.session + if self._autoflush: + session.flush() if synchronize_session == 'evaluate': try: diff --git a/test/orm/query.py b/test/orm/query.py index 0c274efefd..f6bd9013ed 100644 --- a/test/orm/query.py +++ b/test/orm/query.py @@ -2310,5 +2310,18 @@ class UpdateDeleteTest(_base.MappedTest): eq_([john.age, jack.age, jill.age, jane.age], [25,37,29,27]) eq_(sess.query(User.age).order_by(User.id).all(), zip([25,37,29,27])) + @testing.resolve_artifact_names + def test_update_changed_attributes(self): + sess = create_session(bind=testing.db, autocommit=False) + + john,jack,jill,jane = sess.query(User).order_by(User.id).all() + + jack.age = 21 + + sess.query(User).filter(User.age > 29).update({'age': User.age - 10}) + + eq_([john.age, jack.age, jill.age, jane.age], [25,21,29,27]) + eq_(sess.query(User.age).order_by(User.id).all(), zip([25,21,29,27])) + if __name__ == '__main__': testenv.main() -- 2.47.3