From: Ants Aasma Date: Tue, 1 Jul 2008 16:51:14 +0000 (+0000) Subject: query update and delete need to autoflush X-Git-Tag: rel_0_5beta2~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c33e7c7bfa128fee5b1897a1eda9dd8cfc6ef25c;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git query update and delete need to autoflush --- 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()