Hi, I have a sqlite database A and a MySQL database B which share the same schema, where I want to synchronize the contents of certain tables in A with those in B at certain times. Except for the synchronizing step the contents on A's side don't change, while those on B's side might.
I'm trying to do this using Session.merge, which works if the row doesn't exist yet in A, or does but hasn't changed in B. If it has changed in B, I get a ConcurrentModificationError when the merge is flushed. #Suppose this individual doesn't yet exist in A individual = session_B.query(Individual).filter(...).one() session_A.merge(individual) #This will work and add the individual session_A.commit() individual.firstname = 'test' session_B.commit() individual = session_B.query(Individual).filter(...).one() session_A.merge(individual) #This will throw the ConcurrentModificationError session_A.commit() The error is: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python25\lib\site-packages\sqlalchemy-0.5.6-py2.5.egg \sqlalchemy\orm\ session.py", line 673, in commit self.transaction.commit() File "C:\Python25\lib\site-packages\sqlalchemy-0.5.6-py2.5.egg \sqlalchemy\orm\ session.py", line 378, in commit self._prepare_impl() File "C:\Python25\lib\site-packages\sqlalchemy-0.5.6-py2.5.egg \sqlalchemy\orm\ session.py", line 362, in _prepare_impl self.session.flush() File "C:\Python25\lib\site-packages\sqlalchemy-0.5.6-py2.5.egg \sqlalchemy\orm\ session.py", line 1356, in flush self._flush(objects) File "C:\Python25\lib\site-packages\sqlalchemy-0.5.6-py2.5.egg \sqlalchemy\orm\ session.py", line 1434, in _flush flush_context.execute() File "C:\Python25\lib\site-packages\sqlalchemy-0.5.6-py2.5.egg \sqlalchemy\orm\ unitofwork.py", line 261, in execute UOWExecutor().execute(self, tasks) File "C:\Python25\lib\site-packages\sqlalchemy-0.5.6-py2.5.egg \sqlalchemy\orm\ unitofwork.py", line 753, in execute self.execute_save_steps(trans, task) File "C:\Python25\lib\site-packages\sqlalchemy-0.5.6-py2.5.egg \sqlalchemy\orm\ unitofwork.py", line 768, in execute_save_steps self.save_objects(trans, task) File "C:\Python25\lib\site-packages\sqlalchemy-0.5.6-py2.5.egg \sqlalchemy\orm\ unitofwork.py", line 759, in save_objects task.mapper._save_obj(task.polymorphic_tosave_objects, trans) File "C:\Python25\lib\site-packages\sqlalchemy-0.5.6-py2.5.egg \sqlalchemy\orm\ mapper.py", line 1401, in _save_obj raise exc.ConcurrentModificationError("Updated rowcount %d does not match nu mber of objects updated %d" % (rows, len(update))) sqlalchemy.orm.exc.ConcurrentModificationError: Updated rowcount 0 does not matc h number of objects updated 1 Am I trying to use Session.merge the wrong way? Kind regards, Raf Geens -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.