specifically it occurs when you receive an exception on flush(), but then you 
keep doing things that change the state of the session before calling 
rollback().  here's the original test:

http://www.sqlalchemy.org/trac/attachment/ticket/2389/sqlalchemy_rollback_bug.py



On Mar 17, 2013, at 1:38 AM, Warwick Prince <warwi...@mushroomsys.com> wrote:

> Hi Michael
> 
> I have some fairly basic code which is moving data from one DB to another.  I 
> have trapped errors on inserts just in case there were unexpected duplicates. 
>  When I go to commit this transaction, MySQL correctly throws an 
> IntegrityError exception: Duplicate Entry which I trap, and perform a 
> rollback.  However, the rollback ALSO receives an IntegrityError exception 
> from MySQL for the same insert query??
> 
> 
>   File "C:\Documents and Settings\wprince\Desktop\PY CODE 
> DEVELOPMENT\CESyncSQL\Sync_AU.py", line 1868, in SYNC_CustomersOUT
>     session.rollback()
>   File "C:\Python27\lib\site-packages\sqlalchemy\orm\session.py", line 586, 
> in rollback
>     self.transaction.rollback()
>   File "C:\Python27\lib\site-packages\sqlalchemy\orm\session.py", line 324, 
> in rollback
>     self.close()
>   File "C:\Python27\lib\site-packages\sqlalchemy\orm\session.py", line 351, 
> in close
>     self.session.begin()
>   File "C:\Python27\lib\site-packages\sqlalchemy\orm\session.py", line 557, 
> in begin
>     self, nested=nested)
>   File "C:\Python27\lib\site-packages\sqlalchemy\orm\session.py", line 137, 
> in __init__
>     self._take_snapshot()
>   File "C:\Python27\lib\site-packages\sqlalchemy\orm\session.py", line 197, 
> in _take_snapshot
>     self.session.flush()
>   File "C:\Python27\lib\site-packages\sqlalchemy\orm\session.py", line 1473, 
> in flush
>     self._flush(objects)
>   File "C:\Python27\lib\site-packages\sqlalchemy\orm\session.py", line 1542, 
> in _flush
>     flush_context.execute()
>   File "C:\Python27\lib\site-packages\sqlalchemy\orm\unitofwork.py", line 
> 327, in execute
>     rec.execute(self)
>   File "C:\Python27\lib\site-packages\sqlalchemy\orm\unitofwork.py", line 
> 471, in execute
>     uow
>   File "C:\Python27\lib\site-packages\sqlalchemy\orm\mapper.py", line 2163, 
> in _save_obj
>     execute(statement, params)
>   File "C:\Python27\lib\site-packages\sqlalchemy\engine\base.py", line 1358, 
> in execute
>     params)
>   File "C:\Python27\lib\site-packages\sqlalchemy\engine\base.py", line 1491, 
> in _execute_clauseelement
>     compiled_sql, distilled_params
>   File "C:\Python27\lib\site-packages\sqlalchemy\engine\base.py", line 1599, 
> in _execute_context
>     context)
>   File "C:\Python27\lib\site-packages\sqlalchemy\engine\base.py", line 1592, 
> in _execute_context
>     context)
>   File "C:\Python27\lib\site-packages\sqlalchemy\engine\default.py", line 
> 325, in do_execute
>     cursor.execute(statement, parameters)
>   File "C:\Python27\lib\site-packages\mysql\connector\cursor.py", line 309, 
> in execute
>     res = self.db().protocol.cmd_query(stmt)
>   File "C:\Python27\lib\site-packages\mysql\connector\protocol.py", line 136, 
> in deco
>     return func(*args, **kwargs)
>   File "C:\Python27\lib\site-packages\mysql\connector\protocol.py", line 474, 
> in cmd_query
>     return self.handle_cmd_result(self._recv_packet())
>   File "C:\Python27\lib\site-packages\mysql\connector\protocol.py", line 173, 
> in _recv_packet
>     MySQLProtocol.raise_error(buf)
>   File "C:\Python27\lib\site-packages\mysql\connector\protocol.py", line 167, 
> in raise_error
>     raise errors.get_mysql_exception(errno,errmsg)
> IntegrityError: (IntegrityError) 1062: Duplicate entry '1231-63565' for key 
> 'userID' u'INSERT INTO customer_master bla..
> 
> Any ideas?   This is 0.7.1
> 
> Cheers
> Warwick
> 
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>  
>  

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to