[Checkins] SVN: zope.sqlalchemy/trunk/ Support for bulk update and delete with SQLAlchemy 0.5.1

Laurence Rowe l at lrowe.co.uk
Tue Jan 20 15:46:47 EST 2009


Log message for revision 94879:
  Support for bulk update and delete with SQLAlchemy 0.5.1

Changed:
  U   zope.sqlalchemy/trunk/CHANGES.txt
  U   zope.sqlalchemy/trunk/src/zope/sqlalchemy/datamanager.py
  U   zope.sqlalchemy/trunk/src/zope/sqlalchemy/tests.py

-=-
Modified: zope.sqlalchemy/trunk/CHANGES.txt
===================================================================
--- zope.sqlalchemy/trunk/CHANGES.txt	2009-01-20 16:59:06 UTC (rev 94878)
+++ zope.sqlalchemy/trunk/CHANGES.txt	2009-01-20 20:46:47 UTC (rev 94879)
@@ -18,6 +18,10 @@
 
 * Change error message on session.commit() to be friendlier to non zope users.
 
+Feature changes:
+
+* Support for bulk update and delete with SQLAlchemy 0.5.1
+
 0.3 (2008-07-29)
 ----------------
 

Modified: zope.sqlalchemy/trunk/src/zope/sqlalchemy/datamanager.py
===================================================================
--- zope.sqlalchemy/trunk/src/zope/sqlalchemy/datamanager.py	2009-01-20 16:59:06 UTC (rev 94878)
+++ zope.sqlalchemy/trunk/src/zope/sqlalchemy/datamanager.py	2009-01-20 20:46:47 UTC (rev 94879)
@@ -190,6 +190,12 @@
     
     def after_flush(self, session, flush_context):
         mark_changed(session)
+        
+    def after_bulk_update(self, session, query, query_context, result):
+        mark_changed(session)
+
+    def after_bulk_delete(self, session, query, query_context, result):
+        mark_changed(session)
     
     def before_commit(self, session):
         assert zope_transaction.get().status == 'Committing', "Transaction must be committed using the transaction manager"

Modified: zope.sqlalchemy/trunk/src/zope/sqlalchemy/tests.py
===================================================================
--- zope.sqlalchemy/trunk/src/zope/sqlalchemy/tests.py	2009-01-20 16:59:06 UTC (rev 94878)
+++ zope.sqlalchemy/trunk/src/zope/sqlalchemy/tests.py	2009-01-20 20:46:47 UTC (rev 94879)
@@ -412,7 +412,29 @@
         if thread_error is not None:
             raise thread_error # reraise in current thread
 
+    def testBulkDelete(self):
+        session = Session()
+        session.save(User(id=1, firstname='udo', lastname='juergens'))
+        session.save(User(id=2, firstname='heino', lastname='n/a'))
+        transaction.commit()
+        session = Session()
+        session.query(User).delete()
+        transaction.commit()
+        results = engine.connect().execute(test_users.select())
+        self.assertEqual(len(results.fetchall()), 0)
 
+    def testBulkUpdate(self):
+        session = Session()
+        session.save(User(id=1, firstname='udo', lastname='juergens'))
+        session.save(User(id=2, firstname='heino', lastname='n/a'))
+        transaction.commit()
+        session = Session()
+        session.query(User).update(dict(lastname="smith"))
+        transaction.commit()
+        results = engine.connect().execute(test_users.select(test_users.c.lastname=="smith"))
+        self.assertEqual(len(results.fetchall()), 2)
+
+
 class MultipleEngineTests(unittest.TestCase):
         
     def setUp(self):



More information about the Checkins mailing list