On 07/07/2013 06:43 AM, Chris Angelico wrote:

The 'with' statement doesn't allow this. I would need to use some kind
of magic to rebind the old transaction to the name, or else use a list
that gets magically populated:

with new_transaction(conn) as tran:
     tran[-1].query("blah")
     with subtransaction(tran):
         tran[-1].query("blah")
         with subtransaction(tran):
             tran[-1].query("blah")
             # roll this subtransaction back
         tran[-1].query("blah")
         tran[-1].commit()
     tran[-1].query("blah")
     tran[-1].commit()

The other option is to build the magic into the new_transaction class, then 
your code will look like:

 with new_transaction(conn) as tran:
      tran.query("blah")
      with tran.subtransaction():
          tran.query("blah")
          with tran.subtransaction():
              tran.query("blah")
              # roll this subtransaction back
          tran.query("blah")
          tran.commit()
      tran.query("blah")
      tran.commit()

This would definitely make more sense in a loop.  ;)

--
~Ethan~
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to