Using sqlalchemy rev 2102 is flush supposed to commit by itself?
Also, looks like Binary fields get flushed every time, even when not changed.. Again, using wsgi middleware to automatically rollback if an exception occurs in my app, I have a use case where I absolutely must commit a transaction even if an exception occurs later. So I have a set of master/child tables, Shipment -> Package I have session and a transaction (on which, begin has already been called). Here's what happens. now = datetime.datetime.now() shipment = session.query(Shipment).get_by() shipment.hash = '' for package in shipment.packages: package.void_requested = now print "FLUSH 1" session.flush() print "COMMIT 1" trans.commit() # some other non db stuff package.void_confirmed = now print "FLUSH 2" session.flush() print "COMMIT 2" trans.commit() (this causes uow to write out the entire shipment object, including large and unchanged pickle fields.. then write out package) FLUSH 1 2006-11-14 21:04:38,532 INFO sqlalchemy.engine.threadlocal.TLEngine.0x..94 UPDATE shipment SET quote_pickle=?, quote_hash=?, decoded_manifest=? <snip> 2006-11-14 21:04:38,837 INFO sqlalchemy.engine.threadlocal.TLEngine.0x..94 UPDATE package SET void_requested=? WHERE package.id = ? INFO:sqlalchemy.engine.threadlocal.TLEngine.0x..94:UPDATE package SET void_requested=? WHERE package.id = ? 2006-11-14 21:04:38,838 INFO sqlalchemy.engine.threadlocal.TLEngine.0x..94 [datetime.datetime(2006, 11, 14, 21, 4, 38, 518976), 200] INFO:sqlalchemy.engine.threadlocal.TLEngine.0x..94:[datetime.datetime(2006 , 11, 14, 21, 4, 38, 518976), 200] COMMIT 1 2006-11-14 21:04:38,850 INFO sqlalchemy.engine.threadlocal.TLEngine.0x..94 COMMIT INFO:sqlalchemy.engine.threadlocal.TLEngine.0x..94:COMMIT And then comes FLUSH2, like so: FLUSH 2 2006-11-14 21:04:39,544 INFO sqlalchemy.engine.threadlocal.TLEngine.0x..94 BEGIN INFO:sqlalchemy.engine.threadlocal.TLEngine.0x..94:BEGIN 2006-11-14 21:04:39,551 INFO sqlalchemy.engine.threadlocal.TLEngine.0x..94 UPDATE shipment SET quote_pickle=?, decoded_manifest=? WHERE shipment.id = ? INFO:sqlalchemy.engine.threadlocal.TLEngine.0x..94:UPDATE shipment SET quote_pickle=?, decoded_manifest=? WHERE shipment.id = ? (here it is, again writing out these unchanged shipment fields, shipment hasn't been touched between the 2 flushes) 2006-11-14 21:04:39,750 INFO sqlalchemy.engine.threadlocal.TLEngine.0x..94 UPDATE package SET void_confirmed=? WHERE package.id = ? INFO:sqlalchemy.engine.threadlocal.TLEngine.0x..94:UPDATE package SET void_confirmed=? WHERE package.id = ? 2006-11-14 21:04:39,750 INFO sqlalchemy.engine.threadlocal.TLEngine.0x..94 [datetime.datetime(2006, 11, 14, 21, 4, 39, 541557), 200] INFO:sqlalchemy.engine.threadlocal.TLEngine.0x..94:[datetime.datetime(2006 , 11, 14, 21, 4, 39, 541557), 200] 2006-11-14 21:04:39,755 INFO sqlalchemy.engine.threadlocal.TLEngine.0x..94 COMMIT INFO:sqlalchemy.engine.threadlocal.TLEngine.0x..94:COMMIT (see above, flush did a commit by itself) COMMIT 2 File '/usr/local/src/sqlalchemy/lib/sqlalchemy/engine/base.py', line 389 in commit raise exceptions.InvalidRequestError("This transaction is inactive") InvalidRequestError: This transaction is inactive engine strategy is threadlocal. Is this the way it's supposed to work? -- Brad Clements, [EMAIL PROTECTED] (315)268-1000 http://www.murkworks.com AOL-IM or SKYPE: BKClements --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com 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 -~----------~----~----~----~------~----~------~--~---