I'll try to answer briefly and then will leave the computer... On Fri, Jun 05, 2009 at 11:21:49PM +0200, Herwig Hochleitner wrote: > Writing 'connection_val' to connection foo > Value of transaction foo: 'init' > Writing 'transaction_val' to transaction foo > Value of connection foo: 'connection_val'
> import sqlobject > # Turn off caching so that multiple connections (ie transactions) sync > properly > conn = sqlobject.connectionForURI("sqlite:/:memory:", debug=True, > logger="database.query", loglevel="debug", cache=False) > class Dummy(sqlobject.SQLObject): > foo = sqlobject.StringCol() > Dummy.createTable(connection=conn) > Dummy(foo="init", connection=conn) > tr = conn.transaction() > conn_dummy=Dummy.get(1,conn) > trans_dummy=Dummy.get(1,tr) > print "Writing 'connection_val' to connection foo" > conn_dummy.foo = "connection_val" > print "Value of transaction foo: '%s'" % trans_dummy.foo AFAIU, what is going on there is: -- the code opens the first connection (without a transaction); -- a new table is created via connection 1; -- a new row is inserted via connection 1; -- the code opens another connection, and BEGINs a transaction ; -- the code draws two copies of the row via connection1 and connection2; -- the code changes the attribute .foo of the FIRST copy; -- the code prints the attribute .foo of the SECOND copy that was drawn via another transaction, and the value is still 'init' because it isn't changed - the code hasn't changed trans_dummy.foo yet. I consider this behaviour correct, there is nothing to fix. Two different objects have two different values. They are two different objects because they have been drawn via two different connections; every connection has its own cache, and they are not synced. If you want to "fix" this in your program - change the order of actions: -- draw the first row, change it and COMMIT the transaction; -- draw the second copy of the row. Or: -- draw the first row; -- draw the second copy of the row. -- change the first copy and COMMIT the transaction; -- clear the cache of second connection and re-draw the second copy of the row. Oleg. -- Oleg Broytmann http://phd.pp.ru/ p...@phd.pp.ru Programmers don't die, they just GOSUB without RETURN. ------------------------------------------------------------------------------ OpenSolaris 2009.06 is a cutting edge operating system for enterprises looking to deploy the next generation of Solaris that includes the latest innovations from Sun and the OpenSource community. Download a copy and enjoy capabilities such as Networking, Storage and Virtualization. Go to: http://p.sf.net/sfu/opensolaris-get _______________________________________________ sqlobject-discuss mailing list sqlobject-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss