The expression evaluator currently doesn't account for differing string
collations between the database and Python.
+ Returns the number of rows deleted, excluding any cascades.
+
Warning - this currently doesn't account for any foreign key/relation cascades.
"""
#TODO: lots of duplication and ifs - probably needs to be refactored to strategies
if self._autoflush:
session._autoflush()
- session.execute(delete_stmt)
+ result = session.execute(delete_stmt)
if synchronize_session == 'evaluate':
target_cls = self._mapper_zero().class_
if identity_key in session.identity_map:
session._remove_newly_deleted(attributes.instance_state(session.identity_map[identity_key]))
+ return result.rowcount
+
def update(self, values, synchronize_session='expire'):
"""Perform a bulk update query.
The expression evaluator currently doesn't account for differing string
collations between the database and Python.
+ Returns the number of rows matched by the update.
+
Warning - this currently doesn't account for any foreign key/relation cascades.
"""
if self._autoflush:
session._autoflush()
- session.execute(update_stmt)
+ result = session.execute(update_stmt)
if synchronize_session == 'evaluate':
target_cls = self._mapper_zero().class_
if identity_key in session.identity_map:
session.expire(session.identity_map[identity_key], values.keys())
+ return result.rowcount
+
def _compile_context(self, labels=True):
context = QueryContext(self)
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_returns_rowcount(self):
+ sess = create_session(bind=testing.db, autocommit=False)
+
+ rowcount = sess.query(User).filter(User.age > 29).update({'age': User.age + 0})
+ self.assertEquals(rowcount, 2)
+
+ rowcount = sess.query(User).filter(User.age > 29).update({'age': User.age - 10})
+ self.assertEquals(rowcount, 2)
+
+ @testing.resolve_artifact_names
+ def test_delete_returns_rowcount(self):
+ sess = create_session(bind=testing.db, autocommit=False)
+
+ rowcount = sess.query(User).filter(User.age > 26).delete(synchronize_session=False)
+ self.assertEquals(rowcount, 3)
+
if __name__ == '__main__':
testenv.main()