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 [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.