]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
query update and delete need to autoflush
authorAnts Aasma <ants.aasma@gmail.com>
Tue, 1 Jul 2008 16:51:14 +0000 (16:51 +0000)
committerAnts Aasma <ants.aasma@gmail.com>
Tue, 1 Jul 2008 16:51:14 +0000 (16:51 +0000)
lib/sqlalchemy/orm/query.py
test/orm/query.py

index 07caae07af555c467ad835340e1d8573ce960fc9..38edae5b674ffe05fa3ccd64322ea515dd88fc2b 100644 (file)
@@ -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:
index 0c274efefdb46659de5efcab28a5d6a00aadac94..f6bd9013ed84143d61514f2bb6bcc780cbb0ec49 100644 (file)
@@ -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()